脚本编程语言-AutoIt
2024-02-25 10:29:07 阿炯

AutoIt是一个用于Microsoft Windows的免费自动化语言。其早期用于为微软Windows环境创建自动化脚本(有时也称为宏),但现在已经成长为包含了编程语言设计和全面功能的增强的软件,也可用于GUI脚本语言自动化环境;软件本身系闭源,但可无限免费使用。先期由Jonathan Bennett主导开发后转由AutoIt Team维护。


在版本3中,AutoIt的语法结构调整为接近于BASIC系列的语言。它是使用经典数据模型、利用可以存储多种数据类型包括数组的变量类型的第三代编程语言。它兼容于Windows 9x,NT4+(在3.3.0版本中终止了对Windows 2000之前操作系统的支持)。它是完全免费的Windows自动化工具,支持各种 Windows 操作系统,可以用于自动运行基于GUI和非GUI程序,与系统进行交互,以及创建自定义的 GUI 窗体,完成各种自动化任务。AutoIt 的语法简单易懂,适合新手入门,但支持的功能也非常强大,适合高级用户进阶使用。

AutoIt自动化脚本可以编译成压缩、单一的可执行文件,这样的文件可以运行在没有安装AutoIt解释器的计算机上。广泛的函数库(称为UDF或“用户定义函数”)包含在程序中或可以从网站中下载,通过他们可以添加许多专用的功能。AutoIt的安装程序中还自带了基于SciTE的IDE。其中集成了编译器和帮助文本,从而为使用AutoIt的开发者提供了事实上的标准环境。

功能
用于Windows桌面环境的类BASIC结构的脚本语言。
用于特殊应用程序的插件库和模块。
AutoIt用户和开发者的在线支持论坛。
支持TCP和UDP协议。
支持COM(组件对象模型)对象。
调用Win32 DLL中的函数。
运行控制台应用程序和访问标准流。
包含文件在编译文件中以便在运行时提取。
GUI接口,创建消息和输入框。
播放、暂停、恢复、停止、寻道声音文件,获取播放的当前位置和声音文件的长度。
模拟鼠标移动、操作窗口和进程。
自动发送用户输入和键击到应用程序以及程序中的单个控件。
可以把脚本编译为单个可执行文件。
从3.2.4.0开始增加了Unicode支持。
从3.2.10.0开始增加了64位支持。
支持正则表达式。
可工作于Windows Vista的用户帐户控制(UAC)。
通过库进行面向对象设计。

AutoIt是一款类似BASIC脚本语言,且完全免费用于自动化Windows操作系统的脚本语言和工具集。它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务,包括自动化软件安装、登录、数据自动录入、界面自动化测试、数据抓取等,以及可以和其他自动化工具结合起来使用,比如在使用Selenium做自动化测试Web应用时,当弹出一个选择文件的弹框,由于这个弹框是属于操作系统的而非浏览器,Selenium程序就无法进行后续的操作了,这时侯就我们就可以使用AutoIt编写自动化脚本,来执行后续的自动选择文件的操作。


其最初是为PC(个人电脑)对数千台PC进行配置的“批量处理”而设计,不过随着v3版本的到来它也很适合用于家庭自动化和编写用以完成重复性任务的脚本。自动化脚本 AutoIt 提供了强大的功能,可以处理鼠标和键盘事件,注册热键,发送指定消息,操作窗口和控件,甚至可以调用 Windows API 函数,以及处理 Excel 文件和截屏等,可以满足各种自动化需求。

例如:AutoIt支持非常丰富的内置函数和库,可以方便地处理窗口、文件、注册表等系统资源。此外,AutoIt还提供了一个独立的编辑器和编译器,可以将脚本编译成可执行文件,方便在没有安装AutoIt环境的计算机上运行。

其广泛应用于自动化测试、系统管理、软件部署等领域,是一个功能强大且易于上手的自动化工具。由于其灵活性和可扩展性,AutoIt也被许多人用于编写各种自定义的Windows脚本和小工具。在以下应用场景包括但不限:
自动化软件安装和配置:AutoIt可以模拟用户的鼠标和键盘操作,用于自动安装和配置软件,包括点击按钮、输入文本、选择选项等操作。
UI界面自动化测试:AutoIt可以用于自动化测试,模拟用户操作来测试应用程序的界面和功能,以确保其正常工作。
数据抓取和处理:AutoIt可以用于抓取网页数据、处理Excel表格、操作数据库等,实现自动化的数据处理任务。
系统管理:AutoIt可以用于自动化执行系统管理任务,如自动备份文件、清理临时文件、定时执行特定任务等。
自定义工具开发:AutoIt可以用于编写各种自定义的Windows脚本和小工具,满足特定需求,如快速文件重命名、自动化文件操作等。

总之,AutoIt是一个功能强大的自动化工具,适用于各种需要自动化操作的场景,能够大大提高工作效率和减少重复性工作。在编写自动化脚本时,AutoIt 提供了强大的功能,可以处理鼠标和键盘事件,注册热键,发送指定消息,操作窗口和控件,甚至可以调用 Windows API 函数,以及处理 Excel 文件和截屏等,可以满足各种自动化需求。

发展简史
诞生于1998 - C语言,应用于发送按键上
1999年1月 - 第一AutoIt版本( 1.0 )
1999年8月 - AutoIt v2的和AutoItX
1999年9月 - 第一AutoIt版编译
2002年12月 - AutoIt v3的(公共测试版)
2004年2月 - AutoIt v3的(稳定版本)
2006年9月 - Auto3Lib函数库开发
2007年11月 - AutoIt v3.2.10.0 released,将Auto3Lib加入到AutoIt v3中
2008年5月 - AutoIt v3.2.12.0 released,增加图形用户界面功能
2008年12月 - AutoIt(和AutoItX)v3.3.0.0发布

注意:在AutoIt(约第2版)开发的阶段,开发者希望能加快发展AutoIt,基于GPL协议开放了源代码。但是不久有少数人为提高产品竞争力而不遵守非通用公共许可证,且不保留开发者的署名权。AutoIt的开发者决定,为防止这种偷窃的带来不必要的麻烦,于2006年8月,即3.2.0版本后停止发放源代码。

优点
- 轻量级(官方发布包10M左右),编译成可执行文件后在没有安装 AutoIt 的机器上也可直接运行
- 免费,不需要许可证
- 有丰富的函数库(标准函数库和自定义函数库)
- 基于Win32 API,方便扩展
- 有完善的帮助文档和丰富的论坛资源

特点
可以帮助运行 Windows 跟 Dos 程序
模仿键击动作(支持大多数键盘布局)
模仿鼠标移动跟点击动作
对窗口进行移动,调整大小跟其它操作
直接与窗口的“控件”交互(设置/获取文本,移动,关闭等等)
配合剪贴板进行剪切/粘贴文本操作
对注册表进行操作

其他
安装AutoIt时可以选择原汁原味的官方安装包,也可以选择AutoIt中文论坛(简称ACN)出品的汉化增强版。官方安装包 autoit-v3-setup.exe 集成的是裁剪版本的SciTE编辑器,如需更多功能(如要使用Koda Form Designer 编写带GUI界面的程序),则要另外单独下载完整版的SciTE编辑器。汉化增强版中收录了不少官网论坛以及中文论坛中的UDF(User Defined Function,即用户自定义函数),还附带了很多有用的工具,如SPY++、DLL查看器、代码迷惑工具等。相应地,体积也大了一些。

AutoIt可以用来创建Microsoft Windows中的工具软件来自动执行常见的任务,例如监视网站,监视网络,磁盘碎片整理以及备份。它还能用来模拟用户的操作,因此在软件测试中可以使用AutoIt代替手动来“驱动”应用程序。它还常用来开发计算机游戏机器人,用来自动执行游戏中的任务。也可以常用于开发系统封装工具。其本身是单线程的,这使得异步、并发、并行(例如应用程序间通讯)编程相当困难(这可以通过像多进程,组件对象模型等方法变通解决。但如果在语言的内部或其库中提供多线程 API,则麻烦会少得多)。AutoIt应用程序有时会被使用启发式查毒的反病毒软件报告为携带病毒,因为这种应用程序是自解压式可执行文件。其广泛应用于软件测试、自动化运维、批量处理等领域,它支持编写各种类型的脚本,包括GUI、非GUI、COM、DLL等。其中,GUI脚本可以创建透明窗口、自定义按钮等界面,用于操作Windows图形界面程序的测试和自动化。非GUI脚本可以在后台执行,完成一些不需要交互的任务。COM和DLL脚本则可以调用其他程序或系统库,实现更强大的自动化功能。使用AutoIt3可以提高工作效率,减少人工操作的繁琐,减少错误率,并可以避免重复性工作的出现。它可以与其他脚本语言、工具、测试框架等配合使用,实现更广泛的自动化需求。

提取窗口信息

打开AutoIt提供的窗口信息提取工具


将Finder Tool的定位光标拖拽到窗口中的某控件上,获取窗口及控件相关信息。

文件操作指令:
FileCopy("C:\Users\user\Desktop\exp1.txt", "C:\Users\user\Documents\backup\exp2.txt")
DirRemove("C:\Windows\Temp", 1)
Sleep(60000)
Run("C:\Users\user\Desktop\FreeOA.exe")

AutoIt脚本后缀为.au3,双击脚本文件,即可运行脚本,也可以将脚本自动转换成exe文件。弹出框中还有不少可定制的内容,如图标等。


Autoit3控件介绍
直接获取编辑框、复选框、列表框、选择框、按钮、状态栏上的信息,并且作用于这些控件而不必担心键击动作落空。甚至还可以作用于非活动窗口上的控件!

Autoit3语言升级
“更适用的”数值类型、无限长度的字符串、混合语句、if 语句、条件选择语句、while、for、do 循环语句、函数、数组、优秀的字符串处理(超过25个函数!)——其余功能尚未列出。所有这些都使得制作自动化程序的过程不再痛苦。是的,这是个GUI自动化语言,但v3版的语法将更加强大,足以用来编写一般用途的脚本。其旧版本(3.x之前)总是被认为是“不太合适的语言”,现在将不再是这样了。

控件操作
除了“标题/文字”这种v2版本已有的识别窗口的方法以外,现在还可以通过类别名和句柄来识别窗口。可以对窗口进行移动、隐藏、显示、调整大小、激活、关闭以及其它所有您想要实现的操作。

其自带的窗口信息工具可以侦测窗口信息以及窗口上的控件信息,是辅助脚本编写的利器。窗口信息工具上会显示:窗口的标题名、类名、坐标、大小、样式以及句柄,控件ID、类名、控件上的文本、坐标、大小和样式等等。这些信息都可以直接拷贝粘贴到脚本中直接使用,很是方便。

窗口和控件相关的基本操作函数在帮助文档的 [函数参考] -> [窗口管理] 分类下。


使用示例
记事本自动化操作:

(1)运行程序函数打开记事本:Run("notepad.exe")
(2)检测窗口信息工具(au3info) 拖动到记事本窗口
(3)等待窗口出现并成为活动窗口的函数:WinWaitActive("无标题 - 记事本") //“无标题…”是活动窗口记事本的标题
(4)记事本中键入文字:Send("Hello,my dear program")
(5)关闭程序:WinClose("无标题 - 记事本")

出现是否保存对话框:
(1)获取对话框信息,查看可见文本并等待激活: WinWaitActive("记事本","想保存文件")
(2)执行操作:Send("!n") !表示Alt键,Alt + n,表示不保存

整个过程代码如下:
***************************************
Run("notepad.exe")
WinWaitActive("无标题 - 记事本")
Send("Hello,my dear program")
WinClose("*无标题 - 记事本")
WinWaitActive("记事本","想保存文件")
Sleep(500);暂停一下以便观察
Send("!n")
*************************************

热键:
'!' ALT。例:Send("This is text!a") 发送 "This is text" 然后在按下"ALT+a".
'+' SHIFT。例:Send("!+a") 表示发送 "ALT+SHIFT+a".
'^' CONTROL。例: Send("^!a") 的意思是发送按键 "CTRL+ALT+a".
'#' Windows 徽标键。例: Send("#r") 将发送 "Win+r".


最新版本:3.3
3.3.16.1于2022年9月发布。

官方主页:http://www.autoitscript.com/autoit3/

中文论坛:http://www.autoitx.com/