如何应用AutoIt,把局域网中所有的机器名展示在一个combox中?
2013-12-31 11:38
323 查看
有时候,我们会遇到以下情况:
你想与局域网中的某台机器建立连接,你就需要输入对方的机器名。
现在我比较懒,我不想输入对方的机器名,或者对方的机器名很难记住,那怎么办呢?
那就做一个combox在页面上,当点击某按钮的时候,局域网中所有的机器名就会呈现在combox列表中,这样,只需要选择就可以了,能够满足一些懒人的要求。
1. 首选,DOS命令中的net view,可以查看局域网中所有的机器名,于是就有下面的函数:_GetDOSOutput, 可以把net view的结果完整的呈现出来;
2. Net view出来的结果是一个大字符串,我们需要的是机器列表,所以要处理这个大字符串,于是就有了函数:search_computers(),该函数的运行,需要排除几种情况:
1) 网络不通的情况下,net view是啥都没有的,所以当网络不通,我们将会获取“网络不通”的提示性语言;
2) 网络通的情况下,可以应用正则表达式把所有的机器名筛选出来,但是筛选出来的结果应该去掉运行脚本的机器本身,避免配置工具使用者晕点,最大程度的减少错误发生几率;
3. set_combox_list 就可以把任何数组或者字符串,塞入一个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
相关文章推荐
- 如何让同台机器 只能允许一个应用启动(加入用户友好处理)
- 如何获取所有安装的Android应用并且可以运行其中一个?
- 如何在QML应用中得到一个Item的所有属性,信号及方法
- AutoIt:应用WMI接口,打印远程机器安装的所有应用程序
- MyBatis: 获取一个用户的所有blog的基础上讲一下如何获取一篇文章机器作者的信息。
- 如何关闭 一个 应用中的所有 Activity
- 如何关闭 一个 应用中的所有 Activity
- .Net GridView 应用:Gridview有一个CheckBox列,在用了分页的情况下,如何取出用户选择的所有记录id
- 请教一个问题,Android应用运行时在调用某个API(比如相机)时,系统如何判断这个应用是否具备相应的权限?
- 如何在Ubuntu QML应用中实现一个垂直的Slider
- 如何快速在阿里云上构建自己的机器学习应用
- 如何查询一个用户下的所有表
- cocos2d-x 如何制作一个类马里奥的横版平台动作游戏 1 献给所有对动作游戏有爱的朋友
- 具体的一个实例,展示如何访问实例变量和调用成员方法
- 如何使用gcore工具获取一个core文件而不重启应用?
- java中利用反射机制得到一个类的所有构造方法,成员方法机器参数的列表
- 如何遍历一个对象所有的属性并判断属性值
- Oracle 如何删除掉一个用户下的所有对象
- 不显示删除回复显示所有回复显示星级回复显示得分回复 如何简便地将一台机器上的oracle数据库迁移到另一台机器上[问题点数:100分]
- [Android]如何做一个崩溃率少于千分之三噶应用app(9)-Small插件化