AUTOIT3中文教程GOOGLECODE.docx
《AUTOIT3中文教程GOOGLECODE.docx》由会员分享,可在线阅读,更多相关《AUTOIT3中文教程GOOGLECODE.docx(38页珍藏版)》请在冰豆网上搜索。
![AUTOIT3中文教程GOOGLECODE.docx](https://file1.bdocx.com/fileroot1/2023-2/22/daa9a750-74e4-471f-abed-b4465f28ee77/daa9a750-74e4-471f-abed-b4465f28ee771.gif)
AUTOIT3中文教程GOOGLECODE
AutoIt3中文教程<1.1>AutoItv3预览
介绍
AutoItv3是用以编写并生成具有BASIC语言风格的脚本程序的免费软件,它被设计用来在WindowsGUI(用户界面)中进行自动操作。
通过它可以组合使用模拟键击、鼠标移动和窗口/控件操作等来实现自动化任务,而这是其它语言所无法做到或尚无可靠方法实现的(比如VBScript和SendKeys)。
AutoIt最初是为PC(个人电脑)的“批量处理”而设计,用于对数千台PC进行(同样的)配置,不过随着v3版本的到来它也很适合用于家庭自动化和编写用以完成重复性任务的脚本。
AutoIt可以做的事:
∙ 运行Windows及DOS下的可执行文件
∙ 模拟键击动作(支持大多数的键盘布局)
∙ 模拟鼠标移动和点击动作。
∙ 对窗口进行移动、调整大小和其它操作。
∙ 直接与窗口的“控件“交互(设置/获取文字、移动、关闭,等等)
∙ 配合剪贴板进行剪切/粘贴文本操作
∙ 对注册表进行操作
不同于AutoItv2,新的v3版本含有更多的标准语法——类似于VBScript和BASIC——而且现在支持更复杂的表达式、用户函数、循环以及脚本编写老手们所期待的其它所有内容。
正如前一个版本一样,AutoIt被设计得尽可能小(大约115KB)并且不用依赖外部DLL文件或添加注册表项目即可独立运行。
使用Aut2Exe这个工具即可把脚本文件编译为可独立运行的文件。
此外我们还更新了AutoIt的ActiveX和DLL版本——AutoItX,与v2版本不同的是,这是个组件化的语言(COM同一DLL文件中的标准DLL函数)。
AutoItX将使得您可以加入一些AutoIt独有的特性到您最常用的脚本语言或程序设计语言中去!
请查看AutoItX的帮助文档(开始\所有程序\AutoItv3\Extras\AutoItX\AutoItXHelpFile)以获得更多信息和示例。
最重要的是,AutoIt将继续是免费的——不过如果您打算支持我们花在此工程和网站主机上的时间、费用以及所作努力的话,那么您可以到AutoIt的主页上进行捐赠。
新内容
v3具有完全不同于v2.64的语法,因此不能兼容旧的脚本。
不过,v2.64仍旧受到支持并且可以下载。
AutoItv3和v2.64可以同时装在同一台机器上而不会有任何问题,同时还可以保持旧脚本的完好。
v2版本使用的是.aut后缀的扩展名,而v3版本使用的是.au3后缀的扩展名。
因此不必为了适应v3版本而重写v2.64版本的脚本。
v3保持了前一版本中窗口标题、窗口文字、按键和鼠标模拟这些概念,但同时也有了很多新的特性:
控件
直接获取编辑框、复选框、列表框、选择框、按钮、状态栏上的信息,并且作用于这些控件而不必担心键击动作落空。
甚至还可以作用于非活动窗口上的控件!
语言升级
“更适用的”数值类型、无限长度的字符串、混合语句、if语句、条件选择语句、while循环语句、for循环语句、do循环语句、函数、数组、优秀的字符串处理(超过25个函数!
)——其余功能尚未列出。
所有这些都使得制作自动化程序的过程不再痛苦。
是的,这是个GUI自动化语言,但v3版的语法将更加强大,足以用来编写一般用途的脚本。
AutoIt的旧版本总是被认为是“不太合适的语言”,现在将不再是这样了。
模拟键击和鼠标动作
我们花了许多时间用在对键击和鼠标动作的模拟功能的优化上,使其在目前所有的操作系统上都可以做到尽可能的精确。
在这一版本中鼠标动作的功能也表现得更像“人类”了,甚至可以用来创建灵活的演示脚本。
所有模拟鼠标和键盘动作的程序在模拟动作的“速度”及其它功能上都是高度可定制的。
窗口操作
除了“标题/文字”这种v2版本已有的识别窗口的方法以外,现在还可以通过类别名和句柄来识别窗口。
您可以对窗口进行移动、隐藏、显示、调整大小、激活、关闭以及其它所有您想要实现的操作。
还有很多很多...
AutoItv3官方下载地址:
AutoIt3中文教程<2.1>编写运行我的第一个脚本
运行脚本
如果您运行AutoIt(AutoIt3.exe)则会被询问要打开哪个脚本文件。
所谓脚本文件是指包含有AutoIt的关键字及相关函数的文本文件。
使用简单的文本编辑器(比如记事本notepad.exe)即可创建脚本文件,当然我们还有更好的选择。
尽管AutoItv3的脚本只是些纯文本文件,但为了区分脚本文件和文本文件我们给它定义了.au3这个特殊的文件后缀。
如果您完整安装了AutoIt,那么只需直接双击这些脚本文件即可运行它们。
如果您在一个后缀为.au3的脚本文件上点击右键的话,还可以看到有其它的关联操作如open(打开)、edit(编辑)或者compilescript(编译脚本)等。
下面是一个示例脚本。
注意第一行的英文“;”号被用来注释语句(类似于DOS下批处理文件的REM命令):
;这是我写的第一个脚本
MsgBox(0,"这是我写的第一个脚本程序!
","HelloWorld!
")
更复杂的脚本一般会用到函数,通常我们把函数放在脚本的最后部分。
下面是一个带有函数的脚本示例:
;这是我写的第二个脚本(带自定义函数)
MsgBox(0,"第二个脚本!
","此对话框从主脚本中调出!
")
TestFunc()
FuncTestFunc()
MsgBox(0,"第二个脚本!
","此对话框从函数中调出!
")
EndFunc
命令行参数
AutoIt脚本程序可通过命令行调用,当我们传递命令行参数到脚本中的时候会有一个特殊的数组$CmdLine保存相关数据。
注意,脚本文件名不算进参数,如果要获得脚本文件名请查看关于@ScriptName的说明。
如果某个参数中包含有空格字符则必须用英文“双引号”把这个参数围住。
已编译的脚本的也是以同样的方式接收命令行参数的。
$CmdLine[0]保存着命令行中参数的个数(不包括脚本文件名)
$CmdLine[1]是第1个参数
$CmdLine[2]则是第2个参数
...
我们常用$CmdLine[$CmdLine[0]]来表示最后一个参数...
如果您的脚本是像下面这样被运行的话:
AutoIt3.exemyscript.au3参数1"这是一个字符串型参数"
$CmdLine[0]等价于...2
$CmdLine[1]等价于...参数1
$CmdLine[2]等价于...这是一个字符串型参数
@ScriptName等价于...myscript.au3
除了$CmdLine之外,还有一个变量叫做$CmdLineRaw,它保存着完整的未被拆分的命令行语句,对于上面这个例子
$CmdLineRaw等价于...myscript.au3参数1"这是一个字符串型参数"
AutoIt3中文教程<2.2>脚本编辑器
脚本编辑器(ScriptEditors)
AutoIt脚本都是一些很简单的文本文件,用记事本就可以轻松编辑了。
但是更好的选择或许是使用一些强大的免费/共享编辑器,它们一般都会提供诸如语法高亮(让AutoIt的关键字和函数高亮并着色显示从而使得脚本更加易读而且减少错误的产生)等功能,因此会更适合用来编写脚本程序,
目前多数的AutoIt用户使用的编辑器是SciTe,AutoIt开发小组已开发了SciTe的AutoIt版本,该版本带有所有的语法高亮功能,同时还整合了很多AutoIt的第三方工具(比如语法错误检查和脚本整理等)。
如需要SciTe的AutoIt版本请访问此页:
下面是一些推荐的编辑器:
∙TextPad
∙CrimsonEditor(免费的)
∙SourceEdit(免费的)
∙UltraEdit
论坛里经常会有关于哪一个编辑器最好的争论:
)
AutoIt已附带了一些为各种编辑器预写的语法文件,您可在AutoIt安装目录的Extra文件夹下找到它们(在开始菜单/AutoItv3/Extra有一个快捷方式)。
AutoIt3中文教程<2.3>使用Aut2Exe编译脚本
使用Aut2Exe编译脚本(CompilingScriptswithAut2Exe)
把AutoIt的.au3脚本文件编译成可独立运行的程序当然是可实现的,这样就可以使得编译后的程序得以在没有安装AutoIt(或者说没有AutoIt3.exe这个解释程序)的机器上运行。
此外,编译好的脚本程序是经过压缩和加密的,而且还可使用FileInstall函数来绑定(装入)所需文件(同样也会被压缩和加密)到生成的程序中。
当然,所有被#include(包含)的文件都会被连接并编译进目标文件中,这样脚本(程序)在运行时就不再需要这些文件了。
Aut2Exe的使用方法有以下三种:
方法1-开始菜单(StartMenu)
此方法要求完整安装AutoIt.
1. 打开开始菜单并选择AutoItv3程序组。
2. 点击“CompileScriptto.exe”。
3. Aut2Exe的主界面就出现在您的面前了。
4. 点击浏览(Browse)按钮来选择要编译的脚本文件(.au3)和程序的输出位置(.exe)。
5. 如要修改目标程序的图标则请点击(第三个)浏览(Browse)按钮并指定图标文件(也可使用由AutoIt提供的一些示例图标:
默认位于ProgramFiles\AutoIt3\Aut2Exe\Icons).
6. 如果不希望有任何人反编译您的脚本程序(现已有反编译工具)则请在下方输入加密密码。
7. 现在只剩下一个可能会需要调整的设置了,那就是编译程序时的压缩级别(在使用FileInstall装入大量文件时特别有用)。
打开压缩级别(Compression)菜单即可进行设置。
正如其它压缩程序一样,您选择的压缩级别越高则压缩速度越慢。
不过,无论您选择哪一种压缩级别(最终生成的.exe程序)在解压(运行)的时候速度都是差不多的。
8. 点击转换(Convert)按钮即可编译脚本。
方法2-右键菜单(RightClick)
此方法要求完整安装AutoIt.
1. 在资源管理器中找到您要编译的.au3脚本文件。
2. 在其上点击右键。
3. 在出现的右键菜单上点击“”,则脚本文件即被编译并在同一目录下生成一个同名文件(当然,扩展名变成.exe)。
当您选择使用这种编译方式的时候,Aut2Exe将使用当前的图标和压缩级别设置(也即上一次通过第一种方式编译时的设置)。
方法3-命令行(TheCommandLine)
Aut2Exe.exe也可在命令行环境下运行,例如:
Aut2exe.exe/in[/out][/icon][/nodecompile][/comp0-4][/pass]
长文件名应该用双引号围住,如"C:
\ProgramFiles\Test\test.au3"。
若没有给定“out”文件名则生成与脚本文件同名的程序(仅扩展名不同)。
『注:
参数中的指的是要编译的脚本文件位置(相对路径或绝对路径),指的是编译后的程序生成的位置,指的是图标文件的位置,[/comp0-4]指的是压缩级别,指的是加密密码。
』
技术细节
在脚本编译和使用FileInstall函数装入外部文件时所用的是我本人(Jon)的压缩算法。
因为一个编译好的脚本程序必须能做到无需密码(解压)而又能够得以解析并运行。
也就是说压缩是双向的(即压缩和解压都是用同一种算法)。
正因为如此,您应该把生成的程序纯粹地视为编译文件而不能认为(其中保存的信息)是完全安全的。
举个例子来说,如果我(为了桌面展示的目的)写了一个需要含有用户名和密码的脚本,那么我可能会用工作站级别的用户名/密码而不会认为脚本程序已足够安全而使用域或整个网络的密码,除非我非常确定不会有任何终端用户可获取该程序。
AutoIt3中文教程<2.4>AutoIt窗口信息工具
AutoIt窗口信息工具
AutoItv3附带了一个独立的工具,名为窗口信息工具(AutoItWindowInfoTool)(默认位于ProgramFiles\AutoIt3\AU3Info.exe)。
AU3Info让您可以获取指定窗口的相关信息从而便于更有效地实现自动化操作。
窗口的信息主要包括以下这些:
∙ 窗口标题(Windowtitles)
∙ 窗口上的文本文字(Text)(包括可见部分和不可见部分)
∙ 窗口的大小和坐标位置
∙ 状态栏的内容
∙ 鼠标指针的坐标位置
∙ 鼠标指针所指象素的颜色值
∙ 鼠标经过的控件(Control)的相关信息
要使用AU3Info首先当然要运行它了(可从命令行启动或在开始菜单找到它)。
AU3Info将保持在所有窗口的最上层以便您总能看到获取的信息内容。
激活您感兴趣的窗口则AU3Info即可获取该窗口的相关信息并显示出来。
有了AU3Info的帮助您就能迅速地实现自动化了。
当AU3Info运行的时候您可能会想(用CTRL-C快捷键)把AU3Info窗口上的信息直接复制下来然后粘贴到脚本中以避免拼写错误。
但这是很困难的,因为信息内容几乎一直在变(特别是象素信息和鼠标信息)!
这时只需按下CTRL-ALT-F快捷键即可立即暂停AU3Info的信息刷新,此时信息内容不再更新以供复制,要再次更新内容则只需再按一次快捷键就行了。
下面演示了使用AU3Info获取"写字板"的窗口信息时的情况:
AutoIt3中文教程<2.5>AutoIt窗口信息工具窗口标题与文本(基础篇)
窗口标题与文本(基础篇)
当我们在编写用以实现自动化操作(通常是指窗口操作)的脚本的时候,经常要解决的一个问题就是如何(在众多窗口中)准确识别出目标窗口,一般来说我们把窗口的标题(title)作为它的ID,有时候只给标题还不够,这时就需要同时给出标题及文本(text)。
要获得某个窗口的标题是件很简单的事情(直接就可以看到),可以使用AutoIt提供的AutoItWindowInfo(窗口信息工具)。
大多数窗口的标题都是显而易见的,例如系统自带的记事本程序(notepad.exe),它的标题是无标题-记事本,并不难理解对吧?
而且一般来说这就已经足以帮助我们完成自动化任务了。
注意:
若作为参数传递到窗口函数的窗口标题和窗口文本都是空字符串""的话,则该函数的操作目标将会是当前激活的窗口(但设置了非默认的窗口匹配模式(WinTitleMatchMode)时除外)!
窗口标题及其文本是大小写敏感(或者说是严格区分大小写)的。
包括标点符号在内您必须确保它们是完全匹配的。
为了避免在这种小问题上出错,您可以使用工具WindowInfo然后选中获得的标题或文本,按下ctrl-c复制之后就可以直接粘贴到脚本中使用了。
AutoIt的大部分窗口函数都有窗口标题和文本参数,比如说下面的WinWaitActive函数。
这个函数的功能是使脚本暂停执行并一直等到指定窗口出现且激活为止。
WinWaitActive("窗口标题",["窗口文本"],[超时时间])
其中窗口标题是必须指定的参数,而窗口文本和超时时间都是可选参数。
不过也有些函数的窗口文本参数是必须指定的,如果想省略这个参数的话只需指定""(表示空字符串)作为参数即可。
在参数窗口文本中指定一个空字符串或者干脆留空的话相当于告诉AutoIt任何文本都是有效的(反正只管标题匹配了就OK)。
下面以记事本窗口为例说明上面提到的函数的两种用法:
WinWaitActive("无标题-记事本")
以及
WinWaitActive("无标题-记事本","")
如果我们打些字到该窗口上,比如说“这里是足以区分其它记事本窗口的文字”,则在WindowInfo的窗口上将会显示相关信息:
我们可以注意到WindowInfo已经“看到”了这个记事本窗口的标题及文本并显示出来了。
记住,凡是WindowInfoTool能“看到”的AutoIt也能“看到”(指能在脚本中使用)。
现在我们得到的这些信息已经足以用来准确识别此窗口了(就算此时还打开了很多记事本窗口)。
这时我们应该这么使用函数:
WinWaitActive("无标题-记事本","这里是足以区分其它记事本窗口的文字")
窗口文本
作为参数使用的窗口文本必须是符合AutoIt的要求。
一般来说有效的文本是指编辑框控件内的文本(比如像上面的“这里是足以区分其它记事本窗口的文字”),此外还可以使用下面这些文本:
∙ 按钮上的文本,比如&Yes、&No、&Next、确定(&O)等(“&”号后的字符将带有下划线)
∙ 对话框上的文本,比如“是否要继续?
”
∙ 其它控件上的文本
∙ 其它文本--我也不知道那是什么:
)
另外还有一个必须了解的技巧就是除了上面这些文本之外,很多程序窗口的标题会根据操作对象的不同而不同(通常会在默认标题后附加),因此把接在标题后的文本作为窗口文本参数使用也是可以的。
其实我们传递到窗口函数中的窗口文本参数是被AutoIt当作子串(substring)来处理的。
还是以上面的记事本窗口为例,即使把“区分其它记事”作为窗口文本参数也是可以获得同样效果的。
前面提到的所有应用都是以在默认模式下操作为例的,AutoIt还提供了其它几种更高级的方法,可能会稍微比这里的难一点:
)
窗口标题与文本(高级篇)
AutoIt支持四种“窗口匹配”模式。
若要更改此模式可通过函数AutoItSetOption修改WinTitleMatchMode属性即可。
模式1(默认)
只匹配标题的前面部分。
在此模式下,若一个窗口的标题是无标题-记事本则可使用如“无标题-记事本”、“无标题”甚至是“无”等字符串作为窗口标题参数使用。
例如:
WinWait("无标题")
模式2
标题的任意子串皆可。
在此模式下,若一个窗口的标题是无标题-记事本则可使用如“无标题-记事本”、“无标题”、“记事本”甚至是“本”等字符串作为窗口标题参数使用。
eg.
WinWait("记事本")
模式3
完全匹配标题。
在此模式下,若一个窗口的标题是无标题-记事本则只可使用“无标题-记事本”作为窗口标题参数使用。
模式4
高级模式。
在此模式下,一些特殊的字符串可用来代替窗口标题参数,这样我们就可以使用窗口的类别名和句柄来识别窗口了。
至于窗口标题参数维持原样即可。
这些特殊的字符串不能含有空白符(whitespace,一般指空格、制表符、回车等)。
它们分别是:
"classname=CLASSNAME"
"active"
"last"或""
"classname="只匹配具有相同类别名的窗口。
例如要识别一个类别名为“MYCLASS1”的窗口,则可把“classname=MYCLASS1”作为窗口标题参数使用。
"active"表示当前激活的窗口(实际作用与默认的WinTitleMatchMode模式下的""一样)。
"last"使用上一次成功匹配的窗口,这样就不必三番四次地指定窗口标题和窗口文本了。
例如:
AutoItSetOption("WinTitleMatchMode",4)
WinWaitActive("无标题-记事本")
WinClose("last") ;关闭前面匹配成功的记事本窗口
注意:
如果"classname=","active","last"或""都没有作为窗口标题出现在该参数中,则自动以模式1进行匹配。
窗口句柄(WindowHandles/HWNDs)
AutoIt中的变量可用来存储窗口句柄(HWND)。
所谓窗口句柄是指Windows自动分配给每个新创建的窗口的特殊值。
窗口句柄可用来代替窗口标题参数。
使用窗口句柄来代替窗口标题的好处是能够更加精确地识别窗口,比如说有时候我们会同时打开同一应用程序的多个副本,这些窗口具有完全相同的窗口标题和窗口文本,这时就可以利用窗口句柄的唯一性来准确识别窗口了。
另外,当使用窗口句柄代替窗口标题参数时,窗口文本参数将被完全忽略。
很多函数如WinGetHandle、WinList和GUICreate都会返回窗口句柄。
这里要特别提醒大家的是,不能简单的把窗口句柄归类为数值或者字符串,它是使用特殊的数据类型的。
注意:
不管当前的WinTitleMatchMode被设置为何种模式,窗口句柄始终可用。
示例
$handle=WinGetHandle("无标题-记事本","")
WinClose($handle)
控件(Controls)
AutoItv3的其中一个最优秀的新功能就是提供了直接操作某些窗口控件的支持。
我们在窗口上能看到的东西大多都是以下控件的一种:
按钮、列表框、文本编辑框、静态文本等。
比如说系统自带的记事本程序的主窗口也不过只是一个相对而言比较大一点的“编辑框(Edit)”控件罢了!
正因为AutoIt提供了直接对控件操作的途径,我们再也不需要(也不应该)使用模拟键击等低级的方法来操作窗口了,这使得需要实现窗口操作的脚本更加可靠。
注意:
AutoIt仅支持标准的Microsoft控件-有些应用程序(的作者)自己写的自定义控件看起来很像是标准的MS控件,但却无法被脚本程序识别,那就只能靠您的经验判断了,实践出真理!
运行AutoItWindowInfo之后您可以试着把鼠标移动到自己感兴趣的窗口上,在WindowInfo的窗口就会显示当前鼠标经过的控件的信息。
这些信息包括:
∙控件ID(ControlID)
∙类别名(ClassNameNN)
∙文本(Text)
∙控件句柄(HWND)(这个不能利用AutoItWindowInfo获得,获得方法请看下文)
如果你看到某个Control...()函数要求提供控件ID(ControlID)作为参数(实际上大部分控件函数都需要此参数),那么