一、AutoIt介绍
1、介绍
AutoIt是一个强大的脚本语言,主要用于Windows操作系统的自动化。它被设计来自动化Windows GUI(图形用户界面)和一般的脚本任务,如自动点击、填写表单、处理文件和目录等。由于它的简单性和强大的功能,AutoIt广泛应用于软件测试、批量操作和日常重复任务的自动化。
AutoIt的运作方式
AutoIt脚本可以模拟鼠标移动、点击、键盘输入等操作。用户通过编写脚本,可以控制Windows应用程序,实现几乎任何可以手动完成的任务。这些脚本可以编译成独立的可执行文件,独立于AutoIt运行,使其部署和共享变得非常方便。
2、AutoIt中文文档
二、AutoIt的安装汉化
1、下载地址
打开链接 ,点击下图中 Download AutoIt 下载安装包。
2、安装
安装安装提示,一步一步进行,有2个地方需要注意。
A、安装32位还是64位,建议根据推荐选择兼容的X86模式;
B、以后打开.au3文件是编辑还是运行,建议选择:run the script。
3、编译器汉化
A、汉化包下载地址https://www.scintilla.org/SciTETranslation.html ,右键 链接另存为文件,获得语言包。语音包文件名为:locale.properties ,一定要确认好。
B、将语言包放到安装目录下,地址如下:C:\Program Files (x86)\AutoIt3\SciTE ,可以根据自己的安装位置进行更改,上面是默认路径。重新启动软件。
三、基础语法
1、数据类型。
AutoIt 中只存在一种数据类型,那就是 Variant。Variant可用来存储纯数字的或字符串类型的数据,而程序具体如何看待这些数据则要看用户的使用方式。举例来说,若您试图让两个变量相乘,那么它们将被当作数字类型(指具有数学意义的可供计算的值)使用,而若您试图连接(拼合)两个变量则它们将被认做字符串(String类型)。
10 * 20 等价于 数字 200 (* 是乘法运算符)
10 * "20" 等价于 数字 200
"10" * "20" 等价于 数字 200
10 & 20 等价于 字符串 "1020" (& 是字符串连接运算符)
若某个字符串被当作数字进行运算而它又并不能表示有效的数值,则它将被假定为0。例如:
10 * "fgh" 等价于数值 0.
2、变量声明。
所谓变量是指在为了快速读取而在内存中保存数据的一块空间。您可以把它想象成是一个在内存里的邮箱,我们可以往里面存信也可以取信。例如您可以创建一个变量用来保存用户回复的数值或者某个数学表达式的运算结果。AutoIt中的变量不需要类型声明,可以直接赋值使用。AutoIt 中的每个变量都是 Variant 类型。
$var = "Hello, World!"
$var = 20
3、运算符。
+ | 使两个数相加。比如 10 + 20 (等价于 30) |
- | 使两个数相减。比如 20 - 10 (等价于 10) |
* | 使两个数相乘。比如 20 * 10 (等价于 200) |
/ | 使两个数相除。比如 20 / 10 (等价于 2) |
& | 使两个字符串连接起来。比如 "one" & 10 (等价于"one10") |
^ | 提高某个数的幂。比如 2 ^ 4 (2 的 4次方,等价于 16) |
NOT | 逻辑非运算。比如 NOT 1 (等价于 0) |
= | 判断两个值是否相等(用于字符串时不区分大小写)。比如 If $var= 5 Then (如果变量 $var 的值为 5 则条件成立) |
== | 判断两个值是否相等(用于字符串时区分大小写)。 |
<> | 判断两个值是否不相等。 |
> | 判断第一个值(左边)是否大于第二个值(右边)。 |
>= | 判断第一个值(左边)是否大于或等于第二个值(右边)。 |
< | 判断第一个值(左边)是否小于第二个值(右边)。 |
<= | 判断第一个值(左边)是否小于或等于第二个值(右边)。 |
AND | 逻辑与运算。比如 If $var = 5 AND $var2 > 6 Then (如果变量 $var 的值为 5 而且 变量 $var2 的值大于 6 则条件成立 ) |
OR | 逻辑或运算。比如 If $var = 5 OR $var2 > 6 Then (如果变量 $var 的值为 5 或者 变量 $var2 的值大于 6 则条件成立) |
4、条件选择语句
If...Then...Else (字面意思:如果(某个条件成立)…那么(执行某些操作)…否则(执行另外一些不同的操作)
$var = 20
If $var > 10 Then
MsgBox(0, "示例", $var & " 果真大于 10!^_^")
Else
MsgBox(0, "示例", $var & " 居然小于 10!?-_-!")
EndIf
Select...Case (这是开关语句,根据某个表达式的多种不同的值来选择执行不同的语句)
$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
5、循环语句
循环结构的脚本片断用于重复执行某些操作。有两种循环方式,一种是计数循环,即根据给定的次数来执行循环,另外一种是条件循环,即根据某些条件来决定是否继续循环。在 AutoIt 可用下面三种循环语句:
A、 For...Next
For...Next 语句允许被嵌套使用。For 循环的终止条件是控制变量的值等于或越过终值。若 增量 或 终值 是变量,则在循环中程序只以其刚开始(进入循环)时的值进行判断。
For $i = 5 to 1 Step -1
MsgBox(0, "倒数", $i)
Next
MsgBox(0,"", "循环结束")
B、 While...WEnd
While...WEnd 语句允许被嵌套使用。由于程序在每次执行循环体语句前需计算循环控制表达式的值,只有当其为真时才执行循环语句,因此循环体语句可能一次都不被执行。若需要建立一个死循环(无限循环)则可以使用非零数值作为循环控制表达式。
$i = 0
While $i <= 10
MsgBox(0, "目前变量 $i 的值是:", $i)
$i = $i + 1
WEnd
C、 Do...Until
Do...Until 语句允许被嵌套使用。由于程序在每次执行循环体语句之后才计算循环控制表达式的值,只有当其为真时才继续执行循环语句,因此循环体语句至少被执行一次。
$i = 0
Do
MsgBox(0, "目前变量 $i 的值是: ", $i)
$i = $i + 1
Until $i = 10
五、高级语法-函数
在 AutoIt 中有两种函数,包括 内建函数 和 自定义函数。
1、内建函数
AutoIt 拥有丰富的内置函数库,覆盖窗口操作、进程管理、文件处理、字符串操作等多个领域。
A、窗口操作
; 获取窗口状态
WinActivate("[CLASS:Notepad]") ; 激活窗口
WinWaitActive("无标题 - 记事本") ; 等待窗口激活
$state = WinGetState("[ACTIVE]") ; 获取窗口状态(返回位掩码,如2=最大化)
; 窗口控制
WinSetTitle("[ACTIVE]", "", "新标题") ; 修改窗口标题
WinMove("[ACTIVE]", "", 100, 200) ; 移动窗口到(100,200)坐标
WinClose("[CLASS:Chrome_WidgetWin_1]") ; 关闭窗口
B、进程与程序控制
; 启动/终止进程
Run("notepad.exe") ; 启动记事本
ProcessClose("notepad.exe") ; 强制终止进程
; 获取进程信息
$pid = ProcessExists("chrome.exe") ; 检查进程是否存在(返回PID或0)
$list = ProcessList("chrome.exe") ; 获取所有匹配进程的PID数组
C、文件与目录操作
; 文件读写
FileWrite("C:\test.txt", "Hello") ; 写入文件
$content = FileRead("C:\test.txt") ; 读取文件内容
; 目录操作
DirCreate("C:\new_folder") ; 创建目录
$files = _FileListToArray("C:\", "*.*", 1) ; 列举目录文件(返回数组)
; 路径处理
$path = @ScriptDir & "\data\" ; 获取脚本目录并拼接路径
D、字符串与输入
; 字符串操作
$str = StringTrimLeft("AutoIt", 3) ; 截取字符串("It")
$len = StringLen("Hello") ; 获取长度(5)
; 模拟输入
Send("Hello World{ENTER}") ; 发送按键(含回车)
ControlSend("[CLASS:Notepad]", "", "Edit1", "AutoIt") ; 向指定控件发送文本
E、控制流与调试
; 条件判断
If $var > 10 Then
MsgBox(0, "提示", "数值过大")
EndIf
; 循环
For $i = 1 To 5
ConsoleWrite($i & @CRLF)
Next
; 调试输出
ConsoleWrite("调试信息" & @TAB) ; 输出到控制台
ToolTip("脚本运行中...", 0, 0) ; 显示屏幕提示
2、自定义函数
用户可通过使用 Func...EndFunc 语句来自定义函数。可按需要定义函数的参数及其返回值。函数名必须用字母或下划线“_”开头,剩下的部分(非首字符)则可在字母、数字或下划线中随意选择。下面列出的都是合法的函数名: MyFunc、Func1、_My_Func1等。
; 获得某个数的10倍是多少:
$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