微信号:HuashengPeng001

介绍:运维体系建设心得,自动化(监控、配置、平台建设等)、运维开发、应用运维(变更、故障等)等,欢迎各位运维同业多多拍砖,共同进步.

【运维开发】windows下的自动化脚本语言autoit

2017-10-16 20:57 广发证券 彭华盛

注:

- “运维数据集中”属于知识体系的“工具-运维开发-autoit3脚本语言”

- 本篇介绍一下autoit脚本语言的使用,主要作为经验的总结

- 语法的介绍有些摘自操作文档


一、背景:


运维自动化中的操作自动化,比如安装部署,应急操作,服务器切换等偏操作类的工作,归到最底层就是一个个脚本按既定的流程,通过代理(或无代理的SSH方式)远程调用执行。同时,为了提高使用效率提供流程编排,丰富操作可视化,再通常CMDB关联监控,流程审批等工具实现工具间的互联互通,形成管理上的闭环。

对于最底层的脚本,目前可供我们选择的有很多,比如常用的python,shell,bat。在实际实践中,windows操作系统下的运维操作的自动化比linux更麻烦一些。因为在linux下的日常运维操作的就是一些命令的组合,通过python或shell可以比较快的实现。windows则不同,我们的习惯是鼠标在前端工具上操作,这不是python等脚本语言所不擅长的,如果要用python等脚本实现,需要运维人员在思维进行转变,将前端的界面操作转换转化为后台可运行的脚本语言实现另外,当遇到一些不支持二次开发的商业软件,上面的转换就会变得无解。比如:

- 每天需要在一个现有的C/S软件上进行开关操作,但这个软件工具又不提供任何接口;

- 要在几十台机器上给病毒软件打个补丁,但软件厂家只提供一个在软件菜单上点击按钮的方式来实现升级;

上面两种情况,有几个特点:

  • windows操作系统上的软件操作;

  • 这个软件不提供调用接口或调用接口的成本高;

  • 主要是通过鼠标在多个界面上来回切换,键盘输入的操作;

解决上面的问题是autoit脚本语言的强项,autoit脚本是一种在WINDOWS下模拟手工操作的脚本语言,可以作为需要在WINDWOS界上进行操作的自动化,比如:

  • 运行 Windows 及 DOS 下的可执行文件

  • 模拟键击动作(支持大多数的键盘布局)

  • 模拟鼠标移动和点击动作。

  • 对窗口进行移动、调整大小和其它操作。

  • 直接与窗口的“控件“交互(设置/获取 文字、移动、关闭,等等)

  • 配合剪贴板进行剪切/粘贴文本操作

  • 另外,它还附有大量获取数据的宏


、语言概况:


1、一些基本的语法

语法有很多,具体可以到网上下载一个帮助文档,下面只摘常用的几点:


1)条件if … then ….else….endif

If $var > 10 Then

    MsgBox(0, "示例", $var & " 果真大于 10!^_^")

Else

    MsgBox(0, "示例", $var & " 居然小于 10!?-_-!")

EndIf

2)条件select

$var = 30

Select

     Case $var > 1 AND $var <= 10

         MsgBox(0, "示例", "$var 大于 1")

     Case $var > 10 AND $var <= 20

         MsgBox(0, "示例", "$var 大于 10")

     Case $var > 20 AND $var <= 30

         MsgBox(0, "示例", "$var 大于 20")

     Case $var > 30 AND $var <= 40

         MsgBox(0, "示例", "$var 大于 30")

     Case $var > 40

         MsgBox(0, "示例", "$var 大于 40")

EndSelect

3)FOR

For $i = 5 to 1 Step -1

    MsgBox(0, "倒数", $i)

Next

MsgBox(0,"", "循环结束")

4)While...WEnd

While $i<3

   MsgBox(0,"example",$i)

   $i = $i + 1

WEnd

MsgBox(0,"", "循环结束")

 

5)Do...Until

Do

    MsgBox(0, "目前变量 $i 的值是: ", $i)

    $i = $i + 1

Until $i = 10

6) 函数

$val = 10 

For $i = 1 To 10

     $doubled = MyDouble($val)

     MsgBox(0, "", $val & " 的两倍是 " & $doubled)

     $val = $doubled

Next

Exit

Func MyDouble($value)

     $value = $value * 2

     Return $value

EndFunc

7) 注释

单行: ;

多行:

#comments-start

...

...

#comments-end

注:缩写代替:#cs 和 #ce。

8) 嵌入文件

#include

 

9)参数:

AutoIt3.exe myscript.au3 参数1 "这是一个字符串型参数"

$CmdLine[0] 等价于... 2

$CmdLine[1] 等价于... 参数1

$CmdLine[2] 等价于...这是一个字符串型参数

@ScriptName 等价于... myscript.au3

$CmdLineRaw,它保存着完整的未被拆分的命令行语句,等价于...myscript.au3 参数1 "这是一个字符串型参数"


2、常用的一些方法

1)SEND(对指定窗口发送键盘命令时会用到)

'^':表示告知 AutoIt 要发送一个 CONTROL 键击动作,因此语句 Send("^!a") 的意思是发送按键 "CTRL+ALT+a"。以下是一些常用的键盘按键:

Send 命令(无标志参数)

键击结果

{!}

!

{#}

#

{+}

+

{^}

^

{{}

{

{}}

}

{SPACE}

空格

{ENTER}

主键盘区的 回车键

{ALT}

ALT

{BACKSPACE} 或 {BS}

退格

{DELETE} 或 {DEL}

删除(DELETE)

{UP}

向上箭头

{DOWN}

向下箭头

{LEFT}

向左箭头

{RIGHT}

向右箭头

{HOME}

HOME

{END}

END

{ESCAPE} 或 {ESC}

ESC键

{INSERT} 或 {INS}

INS(Insert)

{PGUP}

PageUp

{PGDN}

PageDown

{F1} - {F12}

功能键

{TAB}

TAB

{PRINTSCREEN}

Print Screen key

{LWIN}

左徽标键

{RWIN}

右徽标键

{NUMLOCK on}

NUMLOCK (on/off/toggle)(开/关/切换)

{CAPSLOCK off}

CAPSLOCK (on/off/toggle)(开/关/切换)

{SCROLLLOCK toggle}

SCROLLLOCK (on/off/toggle)(开/关/切换)

{CTRLBREAK}

Ctrl+Break

{PAUSE}

PAUSE

{NUMPAD0} - {NUMPAD9}

数字键盘上的 数字键

{NUMPADMULT}

数字键盘上的 乘号

{NUMPADADD}

数字键盘上的 加号

{NUMPADSUB}

数字键盘上的 减号

{NUMPADDIV}

数字键盘上的 除号

{NUMPADDOT}

数字键盘上的 点号

{NUMPADENTER}

数字键盘上的 回车键

{APPSKEY}

Windows 应用程序键

{LALT}

左 ALT 键

{RALT}

右 ALT 键

{LCTRL}

左 CTRL 键

{RCTRL}

右 CTRL 键

{LSHIFT}

左 Shift 键

{RSHIFT}

右 Shift 键

{SLEEP}

系统休眠(SLEEP)键

{ALTDOWN}

按住 ALT 键直到发送 {ALTUP} 为止

{SHIFTDOWN}

按住 SHIFT 键直到发送 {SHIFTUP} 为止

{CTRLDOWN}

按住 CTRL 键直到发送 {CTRLUP} 为止

{LWINDOWN}

按住左徽标键直到发送 {LWINUP} 为止

{RWINDOWN}

按住右徽标键直到发送 {RWINUP} 为止

{ASC nnnn}

发送 ALT+nnnn 组合键


2、鼠标MouseClick

; 在当前位置执行一次双击

MouseClick("left")

MouseClick("left")

; 在位置 0,500 双击

MouseClick("left", 0, 500, 2)


3、RUN

运行外部程序。

Run ( "文件名" [, "工作目录" [, 标志]] )

Run("Notepad.exe", "", @SW_MAXIMIZE)

4、ProcessClose

结束某个进程。

ProcessClose ( "进程名" )

ProcessClose("notepad.exe")

 ; 返回记事本程序的 PID,若未发现该进程则返回值为 0。

$PID = ProcessExists("notepad.exe")

If $PID Then ProcessClose($PID)

ProcessExists

注:ProcessExists ( "进程名" )的用法:

进程名是指可执行文件的名称(无需给出完整路径),例如:"notepad.exe" 或 "winword.exe"

PID 是标识进程的唯一的数值。

为使 ProcessExists 函数能在 Windows NT 4.0 下工作,系统还需要一个 DLL 文件(PSAPI.DLL,已包含在 AutoIt 的安装目录下)。

每隔 250 毫秒左右进程将被检测一次。 

示例

If ProcessExists("notepad.exe") Then

    MsgBox(0, "示例", "记事本运行中。")

EndIf

5、WinWaitActive

暂停脚本的执行直至指定窗口被激活(成为可活动状态)为止。

WinWaitActive ( "窗口标题", ["窗口文本"], [超时时间] )

参数

 

窗口标题

目标窗口标题。

窗口文本

[可选参数] 目标窗口文本。

超时时间

[可选参数] 以秒为单位。

返回值

成功:

返回值为1。

失败:

返回值为0,说明已超时。


;等待窗口 "无标题" 出现并激活

WinWaitActive("无标题")

;同上,但指定了等待时间为 5 秒

WinWaitActive("无标题", "", 5)


6、MsgBox

通常用在调试当中

MsgBox(0, "标题", "内容")


上面几个命令用上,就能做一些简单的操作了,实际使用过程中,如果遇到一些操作可以查一下帮助文档。下面这些是我作了一些汇总的函数,可以找到了函数再去找帮助文档比较快:

7、其它函数 

Abs 求某个数的绝对值.
ACos 求某个数的反余弦值(arcCosine).
AdlibRegister 注册一个 Adlib 函数.
AdlibUnRegister  
Asc 返回某字符的 ASCII 码数值.
AscW 返回 Unicode 字符的代码.
ASin 求某个数的反正弦值(arcsine).
Assign 给指定变量赋值.
ATan 求某个数的反正切值(arctangent).
AutoItSetOption 调整Autoit各种函数/参数的运作方式.
AutoItWinGetTitle 获取 AutoIt 窗口的标题名.
AutoItWinSetTitle 修改 AutoIt 窗口的标题名.
Beep 播放 beep 声音(PC蜂鸣器).
Binary 返回一个表达式的二进制值.
BinaryLen 返回一个二进制变量的所用字节数.
BinaryMid 取出二进制变量里面X字节的内容.
BinaryToString 转换一个二进制变量为一个字符串.
BitAND 按位"与"运算.
BitNOT 按位"取反"运算.
BitOR BitOR 按位"或"运算.
BitRotate 执行位移操作, 使用旋度.
BitShift 按位"移"运算.
BitXOR 按位"异或"运算.
BlockInput 屏蔽/启用鼠标与键盘(输入).
Break 允许或禁止用户从脚本程序的托盘菜单中退出.
Call 调用用户自定义函数.可以包含字符串参数.
CDTray 弹出或关闭光驱.
Ceiling 返回一个数的四舍五入值(最靠近的最大整数).
Chr 返回指定ASCII码所对应的字符.
ChrW 返回一个字符对应的Unicode(统一的字符编码标准, 采用多字节对字符进行编码)代码.
ClipGet 获取剪切板里的文本.
ClipPut 在剪切板中写入文本.
ConsoleRead 读取AU3进程中的 STDIN 流字符.
ConsoleWrite 写入数据到 STDOUT 流.一些文本编辑器可以读取这个流作为其它程序可接受的数据.
ConsoleWriteError 写入数据到 STDERR 流. 一些文本编辑器可以读取这个流作为其它程序可接受的数据.
ControlClick 向指定控件发送鼠标点击命令.
ControlCommand 向指定控件发送命令.
ControlDisable 禁用或使某控件变成灰色不可用状态.
ControlEnable 使灰色按钮/控件变为"可用"状态.
ControlFocus 设置输入焦点到指定窗口的某个控件上.
ControlGetFocus 返回指定窗口上键盘焦点所在的控件的类别名.
ControlGetHandle 获取指定控件的内部句柄.
ControlGetPos 获取指定控件相对其窗口的坐标位置和大小等信息.
ControlGetText 获取指定控件上的文本.
ControlHide 隐藏指定控件.
ControlListView 向指定的 ListView32 控件发送命令.
ControlMove 在窗口内移动控件.
ControlSend 向指定的控件发送字符串.
ControlSetText 修改指定控件的文本.
ControlShow 显示已经隐藏的控件.
ControlTreeView 发送一个命令到 TreeView32 控件.
Cos 求某个数的余弦值(cosine).
Dec 返回某十六进制数的十进制数值.
DirCopy 复制指定目录及其所有子目录和文件(类似于xcopy命令).
DirCreate 新建一个目录/文件夹.
DirGetSize 返回给点目录所占用的空间(单位字节).
DirMove 移动指定目录及其所有子目录和文件.
DirRemove 删除一个目录/文件夹.
DllCall 调用指定DLL(动态链接库)文件里面的函数.
DllCallbackFree 清空先前由 DllCallbackRegister 创建的句柄.
DllCallbackGetPtr 返回一个回调函数的指针,可以用于传递给一个 Win32 API.
DllCallbackRegister 创建一个用户自定义回调函数.
DllClose 关闭此前打开的DLL文件.
DllOpen 打开指定的 DLL 文件以供 DllCall 函数使用.
DllStructCreate 创建一个 C/C++ 样式的
数据结构供 DllCall 使用.
DllStructGetData 返回数据结构(struct)元素的数据.
DllStructGetPtr 返回 数据结构(struct) 或者 数据结构(struct)的一个元素的指针.
DllStructGetSize 返回一个数据结构(struct)的大小,单位为字节.
DllStructSetData 设置数据结构(struct)中部分元素的数据.
DriveGetDrive 返回一个含有指定驱动器盘符的数组.
DriveGetFileSystem 返回指定驱动器的文件系统类型.
DriveGetLabel 返回指定的驱动器分区的卷标(如果存在).
DriveGetSerial 返回指定驱动器的序列号.
DriveGetType 返回指定驱动器的类型.
DriveMapAdd 映射网络驱动器.
DriveMapDel 断开网络驱动器.
DriveMapGet 获取已映射网络驱动器的路径.
DriveSetLabel 修改指定驱动器的卷标.
DriveSpaceFree 以MB(兆字节)为单位返回指定路径所在分区的剩余空间.
DriveSpaceTotal 以MB(兆字节)为单位返回指定路径所在分区的容量大小.
DriveStatus 以字符串的形式返回指定驱动器的状态.
EnvGet 返回指定的系统环境变量的值.
EnvSet 写入或修改一个环境变量.
EnvUpdate 刷新
操作系统的环境变量.
Eval 返回字符串形式的变量的值.
Execute 执行一个表达式(主要用于数学求值).
Exp 求自然对数 e 的指定幂运算结果.
FileChangeDir 更改当前的工作目录.
FileClose 关闭此前已打开的文本文件.
FileCopy 复制一个或多个文件.
FileCreateNTFSLink 创建一个 NTFS 硬连接到一个文件或者文件夹.
FileCreateShortcut 创建指定文件的快捷方式(.lnk文件).
FileDelete 删除一个或多个文件.
FileExists 检查指定文件或目录是否存在.
FileFindFirstFile 返回一个依照搜索的字符串得到的搜索"句柄".
FileFindNextFile 搜索指定字符串并返回(下一个)与之匹配的文件名,但要求在调用过 FileFindFirstFile 函数之后.
FileFlush 娓呯┖鏂囦欢缂撳啿鍣ㄥ埌纾佺洏.
FileGetAttrib 返回指定文件的属性代码.
FileGetLongName 返回指定路径的长文件名.
FileGetPos 杩斿洖褰撳墠鏂囦欢鍧愭爣.
FileGetShortcut 获取指定快捷方式的各种属性.
FileGetShortName 返回指定路径的短文件名(按8.3命名规则,即文件前缀8个字符,后缀3个字符).
FileGetSize 以字节为单位返回指定文件的大小.
FileGetTime 返回指定文件的时间戳(时间和日期)信息.
FileGetVersion 返回指定"文件"(通常是指可执行文件)的版本信息.
FileInstall 包含并装入指定文件到编译后的脚本程序中.
FileMove 移动一个或多个文件.
FileOpen 打开指定的文件以供读写.
FileOpenDialog 显示一个文件打开对话框.
FileRead 从此前已打开的文本文件中读取指定数量的字符.
FileReadLine 从此前已打开的文本文件中读取指定行的字符.
FileRecycle 把指定的文件或目录放入回收站.
FileRecycleEmpty 清空回收站.
FileSaveDialog 显示一个文件保存对话框.
FileSelectFolder 显示一个文件夹选择对话框.
FileSetAttrib 修改一个或多个文件的属性.
FileSetPos Sets the current file position.
FileSetTime 修改一个或多个文件的时间戳.
FileWrite 向此前已打开的文本文件尾追加一行数据.
FileWriteLine 向此前已打开的文本文件尾追加一行数据.
Floor 返回一个数的四舍五入值(最靠近的最小整数).
FtpSetProxy 设置访问FTP时使用的代理服务器.
GUICreate 创建一个 GUI 窗口.
GUICtrlCreateAvi 在GUI上创建一个AVI视频剪辑控件.
GUICtrlCreateButton 在GUI上创建一个按钮控件.
GUICtrlCreateCheckbox 在GUI上创建一个复选框(Checkbox)控件.
GUICtrlCreateCombo 在GUI上创建一个组合列表框(ComboBox)控件.
GUICtrlCreateContextMenu 在指定控件或GUI窗口上创建上下文菜单(右键).
GUICtrlCreateDate 在GUI上创建一个日期控件.
GUICtrlCreateDummy 在GUI上创建一个 Dummy 控件.
GUICtrlCreateEdit 在GUI上创建一个编辑框(Edit)控件.
GUICtrlCreateGraphic 在GUI上创建一个绘图(Graphic)控件.
GUICtrlCreateGroup 在GUI上创建一个分组(Group)控件.
GUICtrlCreateIcon 在GUI上创建一个图标(Icon)控件.
GUICtrlCreateInput 在GUI上创建一个输入框(Input)控件.
GUICtrlCreateLabel 在GUI上创建一个静态标签(Label)控件.
GUICtrlCreateList 在GUI上创建一个列表(List)控件.
GUICtrlCreateListView 在GUI上创建一个 ListView 控件.
GUICtrlCreateListViewItem 在GUI上创建一个 ListView 项目控件.
GUICtrlCreateMenu 在GUI上创建一个菜单控件.
GUICtrlCreateMenuItem 在GUI上创建一个菜单项目控件.
GUICtrlCreateMonthCal 在GUI上面创建一个月历控件.
GUICtrlCreateObj 在GUI上面创建一个 ActiveX 控件.
GUICtrlCreatePic 在GUI上创建一个图片控件.
GUICtrlCreateProgress 在GUI上创建一个进度条控件.
GUICtrlCreateRadio 在GUI上创建一个单选框(Radio)控件.
GUICtrlCreateSlider 在GUI上创建一个滑动条(Slider)控件.
GUICtrlCreateTab 在GUI上创建一个标签页(Tab)控件.
GUICtrlCreateTabItem 在GUI上创建一个标签页控件项目.
GUICtrlCreateTreeView 在GUI上创建一个 TreeView 控件.
GUICtrlCreateTreeViewItem 在GUI上创建一个 TreeView 控件项目。
GUICtrlCreateUpdown 在GUI上创建一个 Updown(上下箭头)控件。
GUICtrlDelete 删除指定控件.
GUICtrlGetHandle 返回一个指定控件的句柄或者特殊(项目)句柄(Menu, ContextMenu, TreeViewItem).
GUICtrlGetState 获取指定控件的当前状态。
GUICtrlRead 读取指定控件的状态或相关数据.
GUICtrlRecvMsg 获取控件消息。向指定控件发送消息并获取返回的 lParam 的值。
GUICtrlRegisterListViewSort Register a user defined function for an internal listview sorting callback function.
GUICtrlSendMsg 向指定控件发送消息。
GUICtrlSendToDummy 向指定的 Dummy(虚拟)控件发送消息
GUICtrlSetBkColor 设置指定控件的背景颜色。
GUICtrlSetColor 设置指定控件的文本颜色。
GUICtrlSetCursor 为特定控件指定一个鼠标指针.
GUICtrlSetData 修改指定控件的数据.
GUICtrlSetDefBkColor 设置 GUI 窗口中所有控件的默认背景色.
GUICtrlSetDefColor 设置 GUI 窗口中所有控件文本默认颜色.
GUICtrlSetFont 设置指定控件的字体.
GUICtrlSetGraphic 修改一个控件的图形数据.
GUICtrlSetImage 设置指定控件的位图或图标.
GUICtrlSetLimit 设置某些控件的字符数或象素数限制.
GUICtrlSetOnEvent 为指定控件的点击行为定义一个用户函数.
GUICtrlSetPos 调整某个控件在窗口中的坐标位置.
GUICtrlSetResizing 设置某个控件的大小调整方式.
GUICtrlSetState 调整指定控件的状态.
GUICtrlSetStyle 更改指定控件的样式.
GUICtrlSetTip 定义指定控件的关联提示文本.
GUIDelete 删除指定窗口和它包含的所有控件.
GUIGetCursorInfo 获取(相对于 GUI 窗口的)鼠标位置.
GUIGetMsg 捕获窗口消息.
GUIGetStyle 返回一个 GUI 窗口所使用的样式.
GUIRegisterMsg 为已知的Windows 消息代码(WM_MSG)注册一个用户自定义的函数.
GUISetAccelerators Sets the accelerator table to be used in a GUI window.
GUISetBkColor 为GUI窗口设置背景颜色.
GUISetCoord 为下一个控件设置绝对坐标.
GUISetCursor 设置(鼠标经过窗口时的)鼠标指针.
GUISetFont 设置窗口的默认字体.
GUISetHelp 设置在用户按下F1时就打开的(可执行)文件.
GUISetIcon 设置窗口图标.
GUISetOnEvent 褰撲竴涓郴缁熸寜閽鐐瑰嚮鏃惰皟鐢ㄤ竴涓敤鎴疯嚜瀹氫箟鍑芥暟(UDF).
GUISetState 调整窗口的状态.
GUISetStyle 改变窗口样式.
GUIStartGroup 使此后所有被创建的控件都归为一组.
GUISwitch 切换用于 GUI 函数的"当前"窗口.
Hex 返回一个字符串表示的整数或者二进制数的的十六进制数值.
HotKeySet 设置一个可调用某用户函数的热键.
HttpSetProxy 设置访问HTTP时使用的代理服务器.
HttpSetUserAgent Sets the user-agent string sent with InetGet() requests.
HWnd 转换一个表达式为 HWND 句柄.
InetClose 关闭一个由 InetGet() 返回的句柄.
InetGet 通过HTTP,HTTPS或FTP协议从互联网上下载指定文件.
InetGetInfo 返回一个由InetGet()函数返回的句柄的详细信息.
InetGetSize 以字节为单位返回存放在互联网上的指定文件的大小.
InetRead 通过HTTP,HTTPS或FTP协议从互联网上下载一个文件.
IniDelete 从某标准配置文件(*.ini)中删除某个数值.
IniRead 从某标准配置文件(*.ini)中读取某个数值.
IniReadSection 从某标准配置文件(*.ini)中读取某个节中的所有关键字或值.
IniReadSectionNames 从某标准配置文件(*.ini)中读取所有字段的信息.
IniRenameSection 重命名INI文件里面的字段.
IniWrite 写入一个值到标准格式的 .ini 文件.
IniWriteSection 将数据写入到标准INI文件的一个字段.
InputBox 显示以一个输入框以供用户输入数据.
Int 返回某个表达式的整数(整数部分)值.
IsAdmin 检查当前用户是否拥有管理员权限.
IsArray 检查某个变量是否数组类型.
IsBinary 检查一个变量是否是 binary (二进制)类型.
IsBool 检查一个变量是否是布尔值类型(boolean).
IsDeclared 检测某个变量是否已声明.
IsDllStruct 检查一个变量是否是 Dll 数据结构类型.
IsFloat 检测某个变量或表达式是否浮点数.
IsHWnd 检查一个变量基本类型是否是一个窗口句柄或者指针类型.
IsInt 检测某个变量或表达式是否整型数.
IsKeyword 检查一个变量是否是一个关键字(例子: Default(默认)).
IsNumber 检测某个变量是否数字类型数据.
IsObj 检查一个变量或者表达式是否为对象类型.
IsPtr 检查一个变量基本类型是否为指针类型.
IsString 检测某个变量是否字符类型数据.
Log 求某个数的自然对数.
MemGetStats 获取内存相关信息.
Mod 求模运算.
MouseClick 执行鼠标点击操作.
MouseClickDrag 执行鼠标拖曳操作.
MouseDown 在当前位置产生一个鼠标按下(按键)事件.
MouseGetCursor 返回当前鼠标指针光标的ID.
MouseGetPos 获取当前鼠标的坐标位置.
MouseMove 移动鼠标指针.
MouseUp 在当前位置产生一个鼠标释放(按键)事件.
MouseWheel 产生向上或向下滚动鼠标滚轮事件.仅支持NT/2000/XP及更高.
MsgBox 显示一个简单的对话框(可设置超时属性).
Number 返回某表达式的数值结果.
ObjCreate 创建一个指定的 COM 对象.
ObjEvent 包含一个已经得到的Object(对象)的事件句柄.
ObjGet Retrieves a reference to a COM object from an existing process or filename.
ObjName Returns the name or interface description of an Object
OnAutoItExitRegister Registers a function to be called when AutoIt exits.
OnAutoItExitUnRegister UnRegisters a function that was called when AutoIt exits.
Ping 向指定的远程主机发送Ping命令并返回收发时间量.
PixelChecksum 生成某区域象素的校验和.
PixelGetColor 返回指定坐标位置上的象素点的颜色值.
PixelSearch 在指定矩形区域中搜寻与指定颜色值匹配的象素(并返回第一个匹配的象素的坐标).
ProcessClose 结束某个进程.
ProcessExists 检查指定进程是否存在.
ProcessGetStats 返回一个数组,数组中包含了运行中的进程的内存或者IO信息.
ProcessList 返回当前运行中的进程列表(含有进程名和 PID 值).
ProcessSetPriority 设置某个进程的优先级.
ProcessWait 暂停脚本的执行直至给定进程出现为止.
ProcessWaitClose 暂停脚本的执行直至给定进程不再存在为止.
ProgressOff 关闭进度条窗口.
ProgressOn 创建自定义进度条窗口.
ProgressSet 设置此前创建的进度条窗口的坐标位置,文字等属性.
Ptr 转换一个表达式到指针变量.
Random 产生一个伪随机的浮点数.
RegDelete 从注册表中删除指定键值.
RegEnumKey 读取指定子键的名称.
RegEnumVal 读取指定值项的名称.
RegRead 读取注册表指定的值.
RegWrite 创建一个主键,子键或值项.
Round 返回某数值精确到指定位的结果.
Run 运行外部程序.
RunAs 使用一个不同的用户运行一个外部程序文件.
RunAsWait 在不同的用户环境中运行一个外部程序并暂停脚本执行直到程序结束.
RunWait 运行一个外部程序并暂停脚本的执行直至该程序执行完毕.
Send 向激活窗口发送模拟键击操作.
SendKeepActive 在使用Send()函数时,尝试保持指定窗口激活状态.
SetError 设置宏 @error 的值.
SetExtended 设置宏 @extended 的值.
ShellExecute 使用 ShellExecute API 执行一个外部程序.
ShellExecuteWait 使用 ShellExecute API 执行一个外部程序并暂停脚本运行,直到外部程序正常结束.
Shutdown 关机.
Sin 求某个数的正弦值(sine).
Sleep 使脚本暂停指定时间段.
SoundPlay 播放指定的音频文件.
SoundSetWaveVolume 调整系统波形音量的百分比大小.
SplashImageOn 创建一个自定义的图片(闪屏/封面)窗口.
SplashOff 关闭闪屏.
SplashTextOn 创建一个自定义的文字(闪屏)窗口.
Sqrt 求某个数的平方根.
SRandom 设置随机数函数(random)的生成种子数.
StatusbarGetText 获取标准状态栏控件的文本.
StderrRead Reads from the STDERR stream of a previously run child process.
StdinWrite Writes a number of characters to the STDIN stream of a previously run child process.
StdioClose Closes all resources associated with a process previously run with STDIO redirection.
StdoutRead Reads from the STDOUT stream of a previously run child process.
String 返回某表达式的字符串结果.
StringAddCR 在指定字符串的所有换行符( Chr(10) )前附加一个回车( Chr(13) )(ASCII码).
StringCompare 按选项比较两个字符串.
StringFormat 返回格式化过后的字符 (与 C 语言的sprintf() 函数相似).
StringFromASCIIArray 转换一个 ASCII 码数组到一个字符串.
StringInStr 检查某个字符串是否含有给定的子串.
StringIsAlNum 检查某个字符串是否仅含有字母或数字(文字数字式字符).
StringIsAlpha 检查某个字符串是否仅含有字母(文字字符).
StringIsASCII 检查某个字符串是否仅含有ASCII码值介于 0x00 到 0x7f (0-127)之间的字符.
StringIsDigit 检查某个字符串是否仅含有数字(0-9)字符.
StringIsFloat 检查某个字符串是否为浮点数.
StringIsInt 检查某个字符串是否整型数.
StringIsLower 检查某个字符串是否仅含有小写字母.
StringIsSpace 检查某个字符串是否仅含有"空白符".
StringIsUpper 检查某个字符串是否仅含有大写字母.
StringIsXDigit 检查某个字符串是否仅含有十六进制字符(0-9, A-F).
StringLeft 返回字符串中从左开始指定数量的字符.
StringLen 返回指定字符串的字符总数.
StringLower 转换字符串为小写字母.
StringMid 取某个字符串的部分字符.
StringRegExp 检查字串是否符合给定的正则表达式.
StringRegExpReplace 基于正则表达式的文本替换.
StringReplace 替换字符串中的指定子串.
StringRight 返回字符串中从右开始指定数量的字符.
StringSplit 以指定分隔符把字符串拆分成若干子串.
StringStripCR 删除字符串中的所有回车( Chr(13) ).
StringStripWS 删去字符串中的所有"空白符".
StringToASCIIArray 转换一个字符串为包含每个字符的ASCII码的数组.
StringToBinary 转换字符串为二进制数据.
StringTrimLeft 删除字符串中从左开始指定数量的字符.
StringTrimRight 删除字符串中从右开始指定数量的字符.
StringUpper 转换字符串为大写字母.
Tan 求某个数的正切值(tan).
TCPAccept 尝试接受一个套接字(socket)连接.
TCPCloseSocket 关闭一个 TCP 套接字(socket).
TCPConnect 创建一个套接字(socket)连接到已经存在的服务器.
TCPListen 创建一个套接字(socket)监听.
TCPNameToIP 转换一个因特网名称(域名)到一个 IP 地址.
TCPRecv 从已经连接的套接字里面接收数据.
TCPSend 在已经连接的套接字(socket)上面发送数据.
TCPShutdown, UDPShutdown 停止 TCP/UDP 服务.
TCPStartup, UDPStartup 开始 TCP/UDP 服务.
TimerDiff 返回当前与上一次调用TimerInit()之间的时间间隔.
TimerInit (以毫秒为单位)返回当前时间戳.
ToolTip 在屏幕的任意位置显示一个工具提示.
TrayCreateItem 在系统托盘上面创建一个菜单项目控件.
TrayCreateMenu 在系统托盘上面创建一个菜单控件.
TrayGetMsg 得到一个系统托盘图标项目产生的事件.
TrayItemDelete 删除一个系统托盘图标里面的 菜单/菜单项目 控件.
TrayItemGetHandle 返回一个系统托盘图标里面的 菜单/项目 控件的句柄.
TrayItemGetState 得到当前系统托盘项目控件的状态.
TrayItemGetText 得到系统托盘图标里面的 菜单/项目 控件的文本.
TrayItemSetOnEvent 当菜单项目被点击,执行一个用户自定义函数.
TrayItemSetState 设置当前系统托盘项目控件的状态.
TrayItemSetText 设置托盘图标的托盘 菜单/项目 控件的项目文本.
TraySetClick 设置鼠标在系统托盘图标里面的点击模式 - 怎样的鼠标点击才会显示系统托盘的菜单.
TraySetIcon 载入/设置 指定的系统托盘图标.
TraySetOnEvent 当系统托盘发生一个特殊事件就执行一个用户自定义函数.
TraySetPauseIcon 载入/设置 指定的托盘暂停图标(脚本暂停时显示).
TraySetState 设置系统托盘图标状态.
TraySetToolTip (重新)设置托盘图标的工具(气泡)提示文本.
TrayTip 在托盘图标上显示一个气球提示 (仅支持2000/XP)
UBound 返回数组维度的大小.
UDPBind 创建一个引入连接的套接字(socket)绑定.
UDPCloseSocket 关闭一个 UDP 套接字(socket).
UDPOpen 打开一个套接字(socket)连接到一个存在的服务器.
UDPRecv 从已经连接的套接字里面接收数据.
UDPSend 在打开的套接字(socket)上面发送数据.
VarGetType 返回一个变量的AutoIt内部表示类型.
WinActivate 激活指定的窗口(设置焦点到该窗口,使其成为活动窗口).
WinActive 检查指定的窗口是否存在且当前被激活.
WinClose 关闭指定窗口.
WinExists 检查指定的窗口是否存在.
WinFlash 闪烁任务栏上面的窗口标题.
WinGetCaretPos 返回顶层窗口的插入符的坐标位置.
WinGetClassList 获取指定窗口的所有控件类的列表.
WinGetClientSize 获取指定窗口的客户区的大小信息.
WinGetHandle 获取指定窗口的内部句柄.
WinGetPos 获取指定窗口的坐标位置和大小等属性.
WinGetProcess 获取指定窗口关联的进程ID(PID).
WinGetState 获取指定窗口的状态.
WinGetText 获取指定窗口中的文本.
WinGetTitle 获取指定窗口的完整标题名.
WinKill 强行关闭指定窗口.
WinList 获取窗口列表.
WinMenuSelectItem 调用窗口中的某个菜单项目.
WinMinimizeAll 最小化全部窗口.
WinMinimizeAllUndo 撤销此前的 WinMinimizeAll 的效果.
WinMove 移动指定的窗口或调整窗口的大小.
WinSetOnTop 设置指定窗口的"总是在顶层"属性.
WinSetState 显示,隐藏,最小化,最大化或还原一个窗口.
WinSetTitle 修改指定窗口的标题.
WinSetTrans 设置指定窗口的透明度(仅支持Windows 2000/XP或更高版本)
WinWait 暂停脚本的执行直至指定窗口存在(出现)为止.
WinWaitActive 暂停脚本的执行直至指定窗口被激活(成为活动状态)为止.
WinWaitClose 暂停脚本的执行直至所指定窗口不再存在为止.
WinWaitNotActive 暂停脚本的执行直至指定窗口不是激活状态为止. 


三、软件安装:

autoit3安装后会有以下几个子工具:

主要看这个工具:


AutoIt3.exe AutoIt 的主程序,脚本文件 仅需 它即可得以解释运行!
AU3Info.exe

AutoIt窗口信息工具,用来获取WINDOWS工具的窗口的信息,比如

AutoIt.chm 帮助文件。
script 编辑工具

AU3Info.exe这个工具很重要,它能获取:


  • 窗口标题(Window titles)

  • 窗口上的文本文字(Text)(包括可见部分和不可见部分)

  • 窗口的大小和坐标位置

  • 状态栏的内容

  • 鼠标指针的坐标位置

  • 鼠标指针所指象素的颜色值

  • 鼠标经过的 控件(Control)的相关信息

通过上述信息可以进行对控件进行操作,比如下面这个界面的输入框:

四、示例:

近期用AUTOIT作了夜间清算、软件升级的自动化操作。

其中软件升级比较简单,需求是要对50台操作终端的商业软件(没有接口可调)进行软件升级,并进行补丁升级,中间还涉及配置一些可信文件夹以免被病毒软件删除补丁程序。

注:由于有些软件非标准的WINDOWS控件,所以只能通常坐标方式定位到控件,实际执行过程中最好通过控制句柄等唯一信息进行定位.。

DirCopy ( "WindowsLoader","D:\WindowsLoader")

sleep(10000)

Run("D:\WindowsLoader\tttt.exe")

WinWaitActive("C:\Windows\system32\cmd.exe")

MouseClick("left",373, 430, 1)

Send("{ENTER}")

sleep(5000)

sleep(5000)

Send("{ENTER}")

Send("{ENTER}")

sleep(5000)

Run("D:\WindowsLoader\bbbb.exe")

WinWaitActive("bbbbb")

MouseClick("left",767, 502, 1)

sleep(5000)

MouseClick("left",1086, 746, 1)

sleep(240000)

MouseClick("left",1156, 741, 1)

MouseClick("left",1077, 584, 1)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

MouseClick("left",1814, 1060, 2)

WinWaitActive("状态 - Symantec Endpoint Protection")

Sleep(1000)

MouseClick("left",588, 417, 1)

MouseClick("left",1314, 517, 1)

WinWaitActive("例外")

MouseClick("left",724, 693, 1)

Sleep(1000)

MouseClick("left",735, 699, 1)

Sleep(1000)

MouseClick("left",846, 752, 1)

WinWaitActive("浏览文件夹")

Sleep(1000)

ControlSetText("浏览文件夹", "添加安全风险文件夹例外", "Edit1", "D:\WindowsLoader\" )

Sleep(3000)

MouseClick("left",989, 688, 1)

Sleep(1000)

MouseClick("left",1130, 728, 1)

Sleep(1000)

MouseClick("left",1397, 266, 1)

Sleep(1000)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

RunWait('C:\Program Files (x86)\WinRAR\WinRAR.exe x -ad  D:\WindowsLoader\aaaa.zip D:\WindowsLoader\')

Sleep(30000)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Run("D:\WindowsLoader\aaaa.exe")

Sleep(2000)

WinWaitActive("aaaa")

MouseClick("left",1101, 605, 1)




 
运维之路 更多文章 【数据化】运维数据集中阶段性小结 linux应用服务管理工具(supervisor) nginx 摘录 运维平台一体化 试用grafana
猜您喜欢 flask开发小项目 网站分析基础及KPI实践。[系统] PHP代码优化技巧大盘点 你真的了解树莓派吗?唯一限制你的就是你的想象力 Python 爬虫爬取美剧网站