在linux上可以使用shell等脚本语言对命令行的程序进行自动化控制。在windows上一般用批处理来进行自动化的操作,但是如何能够对GUI程序进行自动化控制,这方面的信息还比较少,有位高手向我推荐了AutoIt这个脚本工具。

AutoIt是一个免费软件,是一个与BASIC类似的脚本语言,主要用于自动化windows的GUI程序和一些常规的脚本。它包括模拟敲某个键,鼠标操作,对窗口和控件的操作来达到自动化的目的,而用其他的语言或许不可能或者难办到。工具包(http://pan.baidu.com/s/1hs3j4rE)



1.下载与安装



AutoIt的下载和安装都很简单,只是提醒一点,安装过程中有一步是要选择默认打开脚本文件时是运行还是编辑,这里建议选择编辑。

AutoIt下载地址:https://www.autoitscript.com/site/autoit/downloads/ 或者 工具包中的autoit-v3-setup.exe



2.AutoIt使用



AutoIt WIndow Info(x86/x64):查看Title,Class,ID,Text等数据。

Check For Updates:更新软件。

Compile Script to .exe(x86/x64):将.au3转换为.exe或者.a3x。

    .exe和.a3x的区别:exe文件将脚本解释器AutoIt3.exe也打包在内了;而a3x文件没有打包该解释器,从而可以得到更小的文件体积,但编译它需要autoit3.exe。

Run Script(x86/x64):运行.au3或者.a3x。

SciTE Script Editor:编辑器。


3.实例


自学可以参照工具包中除安装包外的其他三个文档,编写脚本时可以参照http://www.autoitx.com/Doc/。

我使用AutoIt主要是用来测试Windows客户端软件,通过编写脚本使其自动模拟敲某个键,鼠标操作,对窗口和控件的操作。

以飞秋为例,可以通过AutoIt WIndow Info(x86/x64)获取其Title、控件的ID或者Class、Instance,通过编写脚本来控制鼠标的移动、点击,窗口的放大与缩小等。

脚本如下:

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.14.2
 Author:         Sarah

 Script Function:
	Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here

#include <GUITreeView.au3>
#include <GUIListBox.au3>
#include <WinAPI.au3>


Global $title='飞秋(FeiQ)---局域网即时通讯'
$search=1002 ;搜索
$friend_tip=1293 ;好友标签
$group_tip=1294 ;群标签
$recent_tip=1295 ;最近通话标签
$bbs_tip=1296 ;论坛标签

;中间窗口相关控件
$friend_view=1193 ;好友
$group_view=1190 ;群
$recent_view=1298 ;最近通话
;~$bbs_view= ;论坛

;~ 激活客户端窗口
WinActivate($title)
Sleep(1000)
;获取好友数量
$frdNum=getOnFrdCount()
MsgBox(0,'好友数量',$frdNum)
;获取群数量
$groupNum=getOnGroupCount()
MsgBox(0,'群数量',$groupNum)
;获取最近通话数量
$recentNum=getOnRecentCount()
MsgBox(0,'最近通话数量',$recentNum)
;~ 点击论坛标签
ControlClick($title,"",$bbs_tip)
MsgBox(0,'点击论坛标签','论坛...')
;放大缩小窗口
For $i = 3 to 1 Step -1
   WinSetState($title, "", @SW_HIDE)
   WinSetState($title, "", @SW_SHOW)
   WinSetState($title, "", @SW_MINIMIZE)
   WinSetState($title, "", @SW_MAXIMIZE)
   WinSetState($title, "", @SW_RESTORE)
Next
#comments-start
@SW_HIDE = 隐藏窗口
@SW_SHOW = 显示以前隐藏的窗口
@SW_MINIMIZE = 最小化窗口
@SW_MAXIMIZE = 最大化窗口
@SW_RESTORE = 撤销窗口的最小化或最大化状态
@SW_DISABLE = 禁用窗口
@SW_ENABLE = 使窗口可用
#comments-end

;函数
;获得当前好友数量
Func getOnFrdCount()
   ControlClick($title,"",$friend_tip)
   $h=getCtrlHandle($friend_view)
   Return  _GUICtrlTreeView_GetCount($h)
EndFunc

;获得群数量
Func getOnGroupCount()
   ControlClick($title,"",$group_tip)
   $h=getCtrlHandle($group_view)
   Return  _GUICtrlTreeView_GetCount($h)
EndFunc

;获得最近通话数量
Func getOnRecentCount()
   ControlClick($title,"",$recent_tip)
   $h=getCtrlHandle($recent_view)
   Return  _GUICtrlListBox_GetCount($h)
   _GUICtrlTreeView_GetCount
EndFunc

;~ 获取控件句柄
Func getCtrlHandle($control)
   Return ControlGetHandle($title,'',$control)
EndFunc