• 如何应用AutoIt,把局域网中所有的机器名展示在一个combox中?


    有时候,我们会遇到以下情况:

    你想与局域网中的某台机器建立连接,你就需要输入对方的机器名。

    现在我比较懒,我不想输入对方的机器名,或者对方的机器名很难记住,那怎么办呢?

    那就做一个combox在页面上,当点击某按钮的时候,局域网中所有的机器名就会呈现在combox列表中,这样,只需要选择就可以了,能够满足一些懒人的要求。

    1. 首选,DOS命令中的net view,可以查看局域网中所有的机器名,于是就有下面的函数:_GetDOSOutput, 可以把net view的结果完整的呈现出来;

    2. Net view出来的结果是一个大字符串,我们需要的是机器列表,所以要处理这个大字符串,于是就有了函数:search_computers(),该函数的运行,需要排除几种情况:

         1) 网络不通的情况下,net view是啥都没有的,所以当网络不通,我们将会获取“网络不通”的提示性语言;

         2) 网络通的情况下,可以应用正则表达式把所有的机器名筛选出来,但是筛选出来的结果应该去掉运行脚本的机器本身,避免配置工具使用者晕点,最大程度的减少错误发生几率;

    3. set_combox_list 就可以把任何数组或者字符串,塞入一个combox控件中去,就能够实现人性化的配置了。

    #include <array.au3>
    #include <Constants.au3>
    Func search_computers()
        $content = _GetDOSOutput("net view")
        $computers = StringRegExp($content, "\\.*?s", 3)
        $len = UBound($computers)
        If $len = 0 Then
            Return "网络不通"
        EndIf
        Local $computer_list[$len]
        For $i = 0 To $len-1
            $computer_list[$i] = StringStripWS($computers[$i], 2)
            $computer_list[$i] = StringReplace($computer_list[$i], "\", "")
        Next
        _ArrayDelete($computer_list, @ComputerName)
        Return $computer_list
    EndFunc
    
    Func _GetDOSOutput($sCommand)
        Local $iPID, $sOutput = ""
        $iPID = Run('"' & @ComSpec & '" /c ' & $sCommand, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
        While 1
            $sOutput &= StdoutRead($iPID, False, False)
            If @error Then
                ExitLoop
            EndIf
        Sleep(10)
        WEnd
        Return $sOutput
    EndFunc
    
    Func set_combox_list($computer_name)
        $computer_list = search_computers()
        If IsArray($computer_list) Then
            For $i = 0 To UBound($computer_list)-1
                _GUICtrlComboBox_AddString($computer_name, $computer_list[$i])
            Next
            _GUICtrlComboBox_SetEditText($computer_name, "请选择大屏机器")
        Else
            _GUICtrlComboBox_SetEditText($computer_name, $computer_list)
        EndIf
    EndFunc
  • 相关阅读:
    c++跨平台技术学习(一)--使用公共的代码
    软件项目将死的27个征兆
    Java中的方法重载应用
    Java成员变量的初始化和在內存中的运行机制
    Java源文件结构和Java常用包
    细说Java访问控制符
    构造函数与this
    linux基础学习-6.3-DNS的配置文件
    linux基础学习-6.2-网卡配置文件
    linux基础学习-6.1-目录结构的特点
  • 原文地址:https://www.cnblogs.com/autotest/p/3499054.html
Copyright © 2020-2023  润新知