转载自: http://crossdoor.cublog.cn/
大致看了一下,写的非常好。看来偶只是入门了而已。
有学习autoit的朋友,可以看一看。
第一章AutoIt 基础
1、关于AutoIt
AutoIt v3 官方主页
AutoIt v3 中文论坛
AutoIt v3 是用以编写并生成具有BASIC 语言风格的脚本程序的免费软件,
它被设计用来在Windows GUI(用户界面)中进行自动操作. 通过它可以组合使用
模拟键击,鼠标移动和窗口/控件操作等来实现自动化任务, 而这是其它语言所
无法做到或尚无可靠方法实现的(比如VBScript 和SendKeys). AutoIt 非常小
巧,完全运行在所有windows 操作系统上. (thesnow 注:现在已经不再支持win 9x,
微软连XP 都能放弃,何况一个win 9x 支持), 并且不需要任何运行库.
AutoIt 最初是为PC(个人电脑)的"批量处理"而设计, 用于对数千台PC 进
行(同样的)配置. 现在,autoit 是一个支持复杂表达式, 自定义函数,循环等的
强大脚本软件.
AutoIt 可以做的事:
• 简单易懂的类BASIC 表达式
• 模拟键盘,鼠标动作事件
• 操作窗口与进程
• 直接与窗口的"标准控件"交互(设置/获取文字,移动,关闭,等等)
• 脚本可以编译为标准可执行文件
• 创建用户图形界面接口(GUI)
• COM 支持
• 正则表达式
• 直接调用外部DLL 和Windows API 函数
• 程序运行为功能(让程序运行于其它账户)
• 详细易懂的帮助文件于基于社区的支持论坛
• 完全兼容于Windows 2000 / XP / 2003 / Vista / 2008
• Unicode 与64 位运算支持
• 高精度,易使用的数学运算
• 可以运行于Windows Vista Account Control (UAC)
AutoIt 被设计得尽可能小, 并且不用依赖外部DLL 文件或添加注册表项目
即可独立运行. 也可以安全的成为服务运行. 脚本可以使用Aut2Exe 编译为可
独立运行的文件
此外我们还设计了AutoIt 的ActiveX 和DLL 版本—— AutoItX 这是个
组件化的语言(COM 同一DLL 文件中的标准DLL 函数). AutoItX 将使得您可以
加入一些AutoIt 独有的特性到您最常用的脚本语言或程序设计语言中去!
AutoIt 入门与提高
crossdoor Page 6 6/2/2010
PS:本教程将以汉化版AutoIt 3.3.6.1 为基础(大家可以到AutoIt v3 中
文论坛下载并安装。)
2、变量、常量和数据结构
AutoIt 中只存在一种数据类型,那就是Variant,Variant 变量存储任何数据类
型,对它执行各种操作和类型转换。需要注意的是,使用这种弱类型的变量会造
成不好的编程习惯。
Variant 变量的类型检查和计算在运行期间才进行,编译器不会提示代码中的
潜在错误,这些错误在进一步测试中才能发现。与其它的解释性代码一样,AU3
脚本中的许多操作需要直到执行时才能知道,这就是影响脚本代码效率的一大原
因。
所谓变量,顾名思义就是一个可以变动的数据。每个变量都有自己的名字,
而且必须以英文字符"$"开头,其中只能包含字母, 数字和下划线_字符。下面
是一些有效的变量名:$var1、$my_variable。
AutoIt 中使用关键字Dim,Local 和Global 来声明并创建变量:Dim $var1。
也可以一次声明多个变量:Dim $var1,$my_variable。声明变量的同时也可以赋值:
Dim $var1=1,$my_variable=”变量2”。
Dim,Local,Global 这三者的不同之处在于其声明变量的作用域:Dim = 如果
同名的全局变量并不存在则作用域为局部(如果已有同名的全局变量存在则将复
用该变量!)。Global = 将创建的变量的作用域强制转换为全局的。Local = 将创
建的变量的作用域强制转换为局部/函数的。
所谓常量,就是一个不可更改值的数据。例如圆周率π=3.1415926,这就是
一个常量,一旦更改了它的值,那它就不是圆周率了。
常量声明使用Const 关键字,就像:Const $const1 = 1, $const2=12
声明的常量可以用Enum 关键字进行初始化,就像:
Enum $const1 = 1, $const2, $const3
Enum STEP 2 $incr0, $incr2, $incr4
Enum STEP *2 $mult1, $mult2, $mult4
注意:常量不能声明为一个已经存在的变量。
如果把变量比作为只有一个口袋的钱包,那数据结构则可以看成是有很多个
口袋的钱包。
一个数据结构中有多个字段,每个字段中储存一个不同类型的变量值。例如
API 函数RegisterClass 中要用到一个WNDCLASS 的结构,这个结构按照C 语言
的格式定义如下:
typedef struct {
UINT style;
WNDPROC lpfnWndProc;
AutoIt 入门与提高
crossdoor Page 7 6/2/2010
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDCLASS, *pWNDCLASS;
一个定义好的数据结构是没有储存数据的,它就像是一个制作好但是还未使
用的钱包,里面虽然有很多可以放东西的口袋,但却全是空的。
至于数据结构的具体用法,后面的教程中我会参杂在其它的例子中一并介
绍。
3、运算符、宏
AutoIt 支持以下这些赋值符号,数学运算符,比较和逻辑运算符。
运算符详细信息
赋值运算
= 赋值,如$var = 5 (赋值数字5 到$var)
+= 自增赋值,如$var += 1 (添加1 到$var)
-= 自减赋值.
*= 自乘赋值.
/= 自除赋值.
&= 连续赋值. 如$var = "one", 然后$var &= 10 ($var 的结果为"one10")
数学运算
+ 使两个数相加. 如10 + 20 (等于30)
- 使两个数相减.如20 - 10 (等于10)
* 使两个数相乘.如20 * 10 (等于200)
/ 使两个数相除.如20 / 10 (等于2)
& 使两个字符串连接起来.比如"one" & 10 (等于"one10")
^ 提高某个数的幂.比如2 ^ 4 (2 的4 次方,等于16)
比较运算(大小写敏感的字符串需要使用== 来比较)
=
判断两个值是否相等. 比如If $var= 5 Then (如果变量$var 的值为5 则条件
成立). 用于字符串时不区分大小写
== 判断两个字符串是否相等.左方和右方的值将会转化成字符串,并区分大小写,这个运
AutoIt 入门与提高
crossdoor Page 8 6/2/2010
算只能用于区分字符串大小写的比较.
<>
判断两个值是否不相等. 比较会对字符串大小写敏感. 要比较一个大小写敏感的不
等于操作使用Not ("string1" == "string2")
>
判断第一个值(左边)是否大于第二个值(右边).Strings are compared lexicographically
even if the contents of the string happen to be numeric.
>=
判断第一个值( 左边) 是否大于或等于第二个值( 右边).Strings are compared
lexicographically even if the contents of the string happen to be numeric.
<
判断第一个值(左边)是否小于第二个值(右边). Strings are compared lexicographically
even if the contents of the string happen to be numeric.
<=
判断第一个值( 左边) 是否小于或等于第二个值( 右边). Strings are compared
lexicographically even if the contents of the string happen to be numeric.
逻辑运算
AND
逻辑与运算. 如If $var = 5 AND $var2 > 6 Then (如果变量$var 的值为5 而且
变量$var2 的值大于6 则条件成立)
OR
逻辑或运算. 如If $var = 5 OR $var2 > 6 Then (如果变量$var 的值为5 或者变
量$var2 的值大于6 则条件成立)
NOT 逻辑非运算. 如NOT 1 (结果为False)
当一个表达式内含有多个运算符时, 其结合的先后顺序由运算符的优先级别
来控制。AutoIt 中运算符的优先级如下所示:(处于同一优先级的两种运算符将
按从左到右的顺序结合,越上面的运算符则优先级越高)
NOT
^
* /
+ -
&
< > <= >= = <> ==
AND OR
AutoIt 提供了一组宏,它们具备了常量属性,可以在代码中把它们当成字符
串引用,但是不可对它们进行赋值。
下面列出的是AutoIt 所有的宏:
宏详细信息
@AppDataCommonDir 公共Application Data 文件夹所在路径
@AppDataDir 当前用户Application Data 文件夹所在路径
@AutoItExe
当前脚本的完整路径. 已经编译的文件返回EXE 文件所在完
整路径.
@AutoItPID 当前运行脚本的进程PID.
AutoIt 入门与提高
crossdoor Page 9 6/2/2010
@AutoItVersion AutoIt 版本号,如3.2.3.12
@AutoItX64
Returns 1 if the script is running under the native x64 version of
AutoIt.
@COM_EventObj
Object the COM event is being fired on. Only valid in a COM
event Function.
@CommonFilesDir Common Files 文件夹路径
@Compiled 脚本已经编译,返回1.未编译,返回0.
@ComputerName 当前计算机的名称.
@ComSpec
%comspec%的值, 指定的第二个命令解释程序;
主要用于命令行使用, 如. Run(@ComSpec & " /k help |
more")
@CPUArch
Returns "X86" when the CPU is a 32-bit CPU and "X64" when
the CPU is 64-bit.
@CR 回车符, Chr(13); 用于换行.
@CRLF @CR 和@LF ;用于换行.
@DesktopCommonDir 公共Desktop 文件夹路径(桌面)
@DesktopDir 当前用户Desktop 文件夹路径(桌面)
@DesktopHeight 桌面高度(像素) (垂直分辨率)
@DesktopWidth 桌面宽度(像素) (水平分辨率)
@DesktopDepth 像素颜色位深度(如32 Bit).
@DesktopRefresh 屏幕刷新率.(如75 HZ)
@DocumentsCommonDir 公共Documents 文件夹路径(我的文档)
@error 错误标识. 参见SetError 函数.
@exitCode 退出代码
@exitMethod 退出方法. 参见OnAutoItExitRegister() 函数.
@extended 扩展的函数返回值,使用于一些特定函数.如: StringReplace.
@FavoritesCommonDir 公共Favorites 文件夹路径
@FavoritesDir 当前用户的Favorites 文件夹路径
@GUI_CtrlId
最后点击的控件标识(Control ID). 只是使用event 函数时有
效. 请参考GUICtrlSetOnEvent 函数.
@GUI_CtrlHandle
最后点击的控件句柄(Control handle). 只是使用event 函数
时有效. 请参考GUICtrlSetOnEvent 函数.
@GUI_DragId
拖动控件标识(Control ID). 只是使用event 函数时有效. 请
参考GUICtrlSetOnEvent 函数.
AutoIt 入门与提高
crossdoor Page 10 6/2/2010
@GUI_DragFile
拖动文件(到控件)的文件名. 只是使用event 函数时有效.
请参考GUICtrlSetOnEvent 函数.
@GUI_DropId
(拖动后)放下控件标识(Control ID). 只是使用event 函数时
有效. 请参考GUICtrlSetOnEvent 函数.
@GUI_WinHandle
最后点击的GUI 窗口句柄(GUI window handle). 只是使用
event 函数时有效. 请参考GUICtrlSetOnEvent 函数.
@HomeDrive
当前用户主目录所在的驱动器号.(主要用于确定系统所在分
区)
@HomePath
当前用户主目录所在位置.(不包含盘符),如须得到完整路径,
请使用@HomeDrive , @HomePath.
@HomeShare 服务器和共享名称,包含当前用户主目录.
@HOUR 当前时钟的时值(24 时制),值的范围是00 ~ 23
@HotKeyPressed 最后按下的热键. 参考HotKeySet 函数.
@IPAddress1
第一个网络适配器的IP 地址.在某些电脑上可能会返回
127.0.0.1
@IPAddress2 第二个网络适配器的IP 地址.若不存在则返回0.0.0.0
@IPAddress3 第三个网络适配器的IP 地址.若不存在则返回0.0.0.0
@IPAddress4 第四个网络适配器的IP 地址.若不存在则返回0.0.0.0
@KBLayout 返回当前键盘布局的代号。
@LF 换行, Chr(10); 代表用户行中断,进入下一行.
@LogonDNSDomain 登录DNS 域.
@LogonDomain 登录域.
@LogonServer 登录服务器.
@MDAY 当前是一月中的第几天. (01 到31)
@MIN 当前的分钟数(00 到59)
@MON 当前月份(01 到12)
@MSEC 当前时钟毫秒值.范围为(00 到999)
@MUILang
Returns code denoting Multi Language if available (Vista is OK
by default).
@MyDocumentsDir 我的文档的路径.
@NumParams 调用用户函数的参数数量.
@OSArch
Returns one of the following: "X86", "IA64", "X64" - this is the
architecture type of the currently running operating system.
@OSBuild 返回操作系统的内部标号(build 号),如:Windows 2003 Server
AutoIt 入门与提高
crossdoor Page 11 6/2/2010
返回的是3790
@OSLang 返回表示操作系统语言的代号。
@OSServicePack 系统已安装的Service pack 信息,比如"Service Pack 3"
@OSType
Returns "WIN32_NT" for
NT/2000/XP/2003/Vista/2008/Win7/2008R2.
@OSVersion
Returns one of the following: "WIN_2008R2", "WIN_7",
"WIN_2008", "WIN_VISTA", "WIN_2003", "WIN_XP",
"WIN_XPe", "WIN_2000".
@ProgramFilesDir 返回Program Files 文件夹路径.
@ProgramsCommonDir
「开始」菜单\程序目录所在路径(例:C:\Documents and
Settings\All Users\「开始」菜单\程序)公共用户
@ProgramsDir
「开始」菜单\程序目录所在路径(例:C:\Documents and
Settings\All Users\「开始」菜单\程序) 当前用户
@ScriptDir 脚本所在目录. (不包含反斜杠符号"\")
@ScriptFullPath 等价于@ScriptDir & "\" & @ScriptName
@ScriptLineNumber
当前执行的脚本行号. 在调试循环语句是非常有用. (已经编
译的脚本中没意义)
@ScriptName 当前运行的脚本的长文件名.
@SEC 当前时钟的秒值,值域为00 ~ 59
@StartMenuCommonDir
公共用户「开始」菜单目录所在路径(例:C:\Documents and
Settings\All Users\「开始」菜单)
@StartMenuDir 当前用户的「开始」菜单目录所在路径
@StartupCommonDir
公共用户的启动目录所在路径( 例: C:\Documents and
Settings\All Users\「开始」菜单\程序\启动)
@StartupDir 当前用户的启动目录所在路径
@SW_DISABLE 屏蔽(禁用)指定窗口
@SW_ENABLE 恢复指定窗口(使其重新可用).
@SW_HIDE 隐藏指定窗口并激活其它窗口.
@SW_LOCK 锁定窗口,避免被重画.
@SW_MAXIMIZE 最大化指定窗口.
@SW_MINIMIZE
最小化指定窗口并激活下一个在Z 轴(垂直屏幕)方向上的顶
层窗口.
@SW_RESTORE
激活并显示指定窗口,如果该窗口已最小化或最大化则以其
原始大小和位置还原.一般来说,应用程序在还原一个最小化
窗口时应该应用此标志.
AutoIt 入门与提高
crossdoor Page 12 6/2/2010
@SW_SHOW 激活指定窗口并使其以当前大小和位置信息显示.
@SW_SHOWDEFAULT 设置显示状态(SW_值),程序在启动应用程序时需指定该值.
@SW_SHOWMAXIMIZED 激活并最大化指定窗口.
@SW_SHOWMINIMIZED 激活并最小化指定窗口.
@SW_SHOWMINNOACTIVE
最小化显示指定窗口.与@SW_SHOWMINIMIZED 不同之
处在于该窗口将不被激活.
@SW_SHOWNA
令指定窗口根据其当前大小和位置信息显示. 与
@SW_SHOW 不同之处在于该窗口将不被激活.
@SW_SHOWNOACTIVATE
令指定窗口以其上一次的大小和位置显示. 与
@SW_SHOWNORMAL 不同之处在于该窗口将不被激活.
@SW_SHOWNORMAL
激活并显示指定窗口,如果该窗口已最小化或最大化则以其
原始大小和位置还原.一般来说,应用程序在首次显示窗口时
应该应用此标志.
@SW_UNLOCK 取消锁定窗口,允许窗口被重画.
@SystemDir
Windows 下的System (或System32)文件夹所在路径(例:
C:\WINDOWS\system32)
@TAB Tab 字符, Chr(9)
@TempDir 临时文件夹路径
@TRAY_ID
最后点击的项目标识(item identifier), 用于
TraySet(Item)OnEvent 函数.
@TrayIconFlashing 如果托盘图标为闪烁状态,返回1; 反之,返回0.
@TrayIconVisible 如果托盘图标为可见状态,返回1; 反之,返回0.
@UserProfileDir 返回当前用户的Profile 文件夹路径.
@UserName 当前登录的用户的名称.
@WDAY
指示当天属该周的第几天,值域为1 ~ 7,依次表示星期天到
星期六.
@WindowsDir Windows 文件夹所在路径,(例: C:\WINDOWS)
@WorkingDir 当前/激活的工作目录(不包括结尾的反斜杠符号)
@YDAY
指示当天属该年的第几天,值域为001 ~ 366(若不是闰年则
为001 ~ 365)
@YEAR 当前年份(4 位数)
4、流程控制
流程控制是程序中很重要的部分。AutoIt 作为一种顺序执行的脚本,如果没
AutoIt 入门与提高
crossdoor Page 13 6/2/2010
有了流程控制,那结果将让我不敢想象。
流程控制主要用于对某项条件进行判断,然后选择执行代码。详细说明请看
下文分析。
4.1、选择语句
当脚本代码执行到某一行,出现了分歧条件时,就需要使用选择语句来判断
程序接下来该如何执行了。
这就像是你开车走到了十字路口,于是接下来的路程你将面临多种选择,比
如说回家直走、上班左转、买菜右转,此时你就需要根据自身接下来要做的事情
判断下面的路要怎么走了。
选择语句的作用也正是如此,根据条件判断并选择要执行的动作。
AutoIt 中的选择语句有三种,分别为: