当前位置:文档之家› autoit讲义2

autoit讲义2

第一章:序言

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编译为可独立运行的文件

特性详细信息

类 BASIC 的语言表达式与丰富的函数设置

AutoIt 拥有类 Basic 语言表达式意味着使用过其它任意高级语言的作者都能简单的使用.即使是一个新手也能快速入门

尽管它的起点是一个简单的自动化工具,但是现在 Autoit 现在拥有大量函数与新特性.能让您在使用它做到任何工作都是事半功倍. (它的自动化及自定义特性足以傲视群雄!)语言特性包括:

?使用高级语言特性的函数,循环与表达式

?令人惊讶的字符串操作和 Perl 兼容正则表达式引擎 (使用PCRE函数库).

?COM 支持

?调用 Win32 与第三方 DLL API

内置语法高亮的编辑器

AutoIt 包含了一个自定义的小型版本的 Scite 编辑器,它能使您编辑脚本更加方便. 用户可以参考下载完整版本的 Autoit 专用 SciTe这个编辑器包含的附加工具让您编写脚本更加得心应手. (汉化版本中的编辑器来自SCITE官方,附加设置文件来源于autoit4scite.部分被加强修改)

模拟键盘和鼠标

我们花了许多时间用在对键击和鼠标动作的模拟功能的优化上, 使其在目前所有的操作系统上都可以做到尽可能的精确. 在这一版本中鼠标动作的功能也表现得更像"人类"了,甚至可以用来创建灵活的演示脚本.所有模拟鼠标和键盘动作的程序在模拟动作的"速度"及其它功能上都是高度可定制的.

窗口管理

您可以对窗口移动,隐藏,显示,修改大小,激活,关闭,等操作. 对窗口本身的操作可以是关于标题,文本,大小,坐标,类,和内部Win32 API 句柄.

控件

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

安装目录结构

AutoIt 安装器创建的目录结构(通常在\Program Files\AutoIt3,汉化版本在d:\Autoit3) 下表是主要的目录结构说明. 安装器同样也会在开始菜单中创建项目, 不会在其他位置创建或者修改文件.汉化版本与官方版本有不少出入,请自行了解.

如果您需要重复的运行 AutoIt 脚本,只需要AutoIt3.exe. 如果您编译脚本为可执行文件,则系统中不需要再安装 AutoIt.

注册表键值

AutoIt 安装器创建注册表键于HKEY_LOCAL_MACHINE\Software\AutoIt v3和HKEY_CURRENT_USER\Software\AutoIt v3. 若没有完整安装过 AutoIt 则这些项目是不会存在的,也就是说,AutoIt 的运行对服务器而言是"干净的"(注册表里不会有垃圾信息).

下面这个列表显示默认(或者可选) 注册表键. 斜体字表示这些键不是创建于安装器自己,但是第一次执行相关工具时会创建.:

第二章:如何使用AutoIt

运行脚本

这里有一个脚本例子. 说明;是用来注释用的 (就像DOS批处理下的REM命令):

; 这是我的第一个脚本

MsgBox(0, "我的第一个脚本!", "Hello World!")

更复杂的脚本一般会用到函数, 通常我们把函数放在脚本的最后部分(这是一个好习惯,虽然在很多高级语言中不是这样.如C++). 下面是一个带有函数的脚本示例 :

; 这是我的第二个脚本 (使用函数)

MsgBox(0, "我的第二个脚本!", "主脚本:Hello!")

TestFunc()

Func TestFunc()

MsgBox(0, "我的第二个脚本!", "主脚本:Hello!")

EndFunc

命令行参数

当我们传递命令行参数到AutoIt脚本中的时候,AutoIt会初始化一个特殊的数组 $CmdLine. 注意, 脚本文件名不算进参数; 请使用 @ScriptName 代替脚本名称. 一个参数中如果含有空格,必须使用"双引号"把内容围住. 已编译的脚本同样也能接受命令行参数. 请看下面代码:

$CmdLine[0] ;参数的数量

$CmdLine[1] ;第一个参数 (脚本名称后面)

$CmdLine[2] ;第二个参数等等

...

$CmdLine[$CmdLine[0]] ;可以用来表示得到最后一个参数...

如果您的脚本是像下面这样被运行的话:

AutoIt3.exe myscript.au3 参数1 "这是一个其它参数"

$CmdLine[0] 等价于 (2)

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

$CmdLine[2] 等价于...这是一个其它参数

@ScriptName 等价于... myscript.au3

除开 $CmdLine 之外还有一个变量叫做 $CmdLineRaw ,它保存着完整的未被拆分的命令行语句, 对于上面这个例子:

$CmdLineRaw 等价于... myscript.au3 参数1 "这是一个其它参数"

如果脚本已经被编译,那么得到的值将会是下面这个样子:

myscript.exe 参数1 "这是一个其它参数"

$CmdLineRaw 等价于...参数1 "这是一个其它参数"

注意 $CmdLineRaw 会立即返回参数.

注意 : 只有 63 个参数会被 $CmdLine[...] 正常返回, 但是 $CmdLineRaw 总是会返回完整的所有参数.

编辑脚本

脚本编辑器(Script Editors)

AutoIt 脚本都是一些纯文本文档,您可以使用任何文档编辑器编辑. 但是更好的选择或许是使用一些强大的免费/共享编辑器进行书写, 它们一般都会提供诸如语法高亮(让AutoIt的关键字和函数高亮并着色显示从而使得脚本更加易读而且减少错误的产生)等功能,因此会更适合用来编写脚本程序.

编译脚本

两种方法

方法一:使用autoit提供的exe生成器

方法二:右键点击索要编译的脚本,直接编译

第三章入门指南

我们从Hello world开始

首先,打开您想要创建脚本的文件夹. 在空白处点击右键,选择新建/ AutoIt v3 脚本.文件会立即新建,您可以输入一个好记的名字. 如:修改'新建AutoIt v3 脚本' 为'helloworld' ,如果显示了扩展名请不要修改 '.au3' 扩展名.

现在我们新建了一个脚本文件,怎么编辑它呢?在脚本文件上面点击右键,选择

编辑脚本(SCITE).

这是一些注释,可以简单的说明作者的信息. 这些行不会被执行,就像DOS下面的REM命令一样.

我们现在先让AutoIt 显示一个消息框 - 使用MsgBox函数.

在脚本文件的底部输入:

MsgBox(0, "指南", "你好!世界!")

很多函数都有参数, MsgBox 同样也有 - 标志, 标题和消息. 标志是一个整数,用来修改消息框的显示样式,我们这里设置为0. 标题和消息是字符串,当在AutoIt中使用字符串,必须使用双引号或者单引号把文本括起来. "这是一些文本" 或者 '这是一些文本' - 都是可以工作的.

在Scite编辑器里面按F5键.

附录:

MsgBox

显示一个简单的对话框(可设置超时属性).

MsgBox ( 标志, "标题", "文本" [, 超时时间 [, 句柄]] ) 参数

返回值

成功: 返回按下按钮的 ID.

说明消息框被用户忽略(超时).

失败: 返回 -1,

注意

标志参数可以是下列数值的组合(数值相加):

操作记事本

让我们来实现下面的操作描述,了解Autoit的功能

操作描述1:

运行记事本

在记事本中写入“hello world this is a first script”

保存

关闭

作业:

操作描述2:

我们在上一个脚本的基础上传入命令行参数,利用参数来控制写入的内容

传入一个参数1或者2,如果传入1,则在记事本中写入“parameter one”

如果传入2,则在记事本中写入“parameter two”,如果传入其他则在记事本中显示“none”,最后关闭不保存!

自动安装程序演示

安装RAR

第四章:Autoit语法

AutoIt 中只存在一种数据类型,那就是Variant. Variant可用来存储纯数字的或字符串类型的数据, 而程序具体如何看待这些数据则要看用户的使用方式;举例来说,若您试图让两个变量相乘, 那么它们将被当作数字类型(指具有数学意义的可供计算的值)使用, 而若您试图连接(拼合)两个变量则它们将被认做字符串(String类型).

一些例子:

10 * 20 等价于数字200 (*是乘法运算符)

10 * "20" 等价于数字 200

"10" * "20" 等价于数字 200

10 & 20 等价于字符串 "1020" (&是字符串连接运算符)

若某个字符串被当作数字进行运算,后台调用Number()后它又并不能表示有效的数值, 则它将被假定为0.例如:

10 * "fgh" 等价于数值0.

如果一个字符串使用布尔值 ,假定字符串为空"" , 它的结果为假.见下文.例子:

NOT "" 结果为布尔值真(true).

数字类型

数字可以是标准的十进制数,2,4.566, 和-7

指数形式也被支持,因此你可以用 1.5e3来代替1500.

(说明:字母e或E后面的数表示指数,因此上例等价于1.5*10*10*10,字母e或E 之前必须要有数字,而且需用小数表示,e或E后面的指数必须是整数)

整数还可以用十六进制来表示, 但需添加前缀0x ,如0x409或0x4fff(此时只有32位的数值才是合法的数字)..

字符串类型(String)

字符串以一对英文双引号括起来,比如"这样". 若需表示一个包含双引号的字符串则需连续两次用双引号括起来,比如:

"这里是一对 ""双引号"" - ok?"

此外还可以用一对单引号括起来以表示字符串,比如'这样'和'这里是一对 ' '单引号'' - ok?'

有时一个字符串包含大量双引号或单引号, 则可以通过混和使用使得对字符串的表示更加简单. 比如下例:

'这个 "句子" 中包含了 "很多" 的 "双引号" ,留意到了吗?'

该例使用了单引号来括住字符串,看起来就没有下面常规的表示方法那么累赘了.

"这个 ""句子"" 中包含了 ""很多"" 的 ""双引号"". 能留意到吗?"

当求值时,字符串可以有一个环境变量或者变量代替Opt()函数定义.

布尔值(Booleans)

布尔值是一个逻辑值.只有true和false (真和假).

你可以给一个变量赋值, 使用布尔操作 and, or和not.

例子:

$Boolean1 = true

$Boolean2 = false

$Boolean3 = $Boolean1 AND $Boolean2

结果: $Boolean3 为false

$Boolean1 = false

$Boolean2 = not $boolean1

结果: $Boolean2 为true

如果布尔值使用其它数的和, 将会得到下面的结果:

数值0等于布尔值false

任何其它数值将会等于布尔值true

例子:

$Number1 = 0

$Boolean1 = true

$Boolean2 = $Number1 and $Boolean1

(如果含有失败)这个结果将会返回false

如果您计算一个布尔值的算术.(这是不明智的!), 将会返回下面的结果:

如果布尔值为 true 将会转换为数值1

如果布尔值为 false 将会转换为数值0

例子:

$Boolean1 = true

$Number1 = 100

$Number2 = $Boolean1 + $Number1

这个$Number2结果将会返回数值 101

如果您使用字符串进行布尔值连接, 将会返回下面的结果:

如果布尔值为 true 将会返回字符串"True"

如果布尔值为 false 将会返回字符串"False"

例子:

$Boolean1=true

$String1="Test is: "

$String2=$String1 & $Boolean1

这个结果将会返回字符串"Test is: True"

如果要从反方向来比较布尔值,结果是不同的. 当您使用字符串比较布尔值请使用下面的方法:

只有空字符串("")才能返回布尔值false

任何其它的字符串(包括字符串等于"0") 都将会返回布尔值true

二进制值(Binary)

Binary 类型可以储存任意字节的值. 当储存时会自动转换为十六进制值(HEX). 例子:

$bin = Binary("abc")

$str = String($bin) ; "0x616263"

指针

指针类型将会存放一个32位或者64位内存地址. 定义于使用的是32位或者64位的AutoiIt. 它们将会被转换到一个字符串变量表示的十六进制值. 窗口句柄 (HWnd) 从WinGetHandle返回一个指针类型.

数量类型范围

在下方的这个列表中显示了各种变量有效的范围.

变量类型

一个变量就是一块内存空间,你可以把它认为是一个内存的油箱,可以将信息放进去或取出来。例如你创建一个变量来存储一个数字或者一个表达式的结果。每个变量都有一个名称,并且必须用$符号作为开始,只能包含字母,数字和下滑线“_”,以下是一些例子的名称。

$var1

$my_variable

变量声明

变量由Dim,Local,Global关键字声明和建立

Dim $var1

Dim $var1, $myvariable

$var1 = "create and assign"

常量声明

Const $const1 = 1, $const2=12

Enum $const1 = 1, $const2, $const3 ; 1, 2, 3 Enum STEP 2 $incr0, $incr2, $incr4 ; 0, 2, 4 Enum STEP *2 $mult1, $mult2, $mult4 ; 1, 2, 4

范围声明

Global全局变量,可以在任何地方进行修改。

Local可用于函数内声明,函数方法执行完成,变量自动消亡。

数组声明

$Array[0]="A"

$Array[1]="U"

..etc..

$Array[6]="3"

$Dim $a[5]=[10,11,12,13,14]

运算符

优先级

NOT

^

* /

+ -

&

< > <= >= = <> ==

AND OR

条件选择语句

在我们写脚本程序的过程中总会需要根据某个条件或一组条件的成立情况来控制程序的流程,我们可能要判断某个数值是否大于另外一个, 又或者是判断某个字符串里是否含有指定的子串等等.

对系统而言所有的条件判断只有true(非零,真) 或者false(零,假)两种可能结果.通常我们利用 ==, <>,>=等比较运算符来对各种对象进行比较从而建立条件.

在 AutoIt 可用下面两种条件语句:

?If...Then...Else

(字面意思:如果(某个条件成立)…那么(执行某些操作)…否则(执行另外

一些不同的操作)

?Select...Case

(这是开关语句,根据某个表达式的多种不同的值来选择执行不同的语句) ?Switch...Case

(同上)

这两种语句的功能差不多,具体要用哪一种决定于给定的条件. 下面是一个使用

If语句的例子,若变量var的值大于10则会弹出一个对话框(Message Box) . $var = 20

If $var > 10 Then

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

Else

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

EndIf

在上面的例子中,很明显可以看出变量var的值确实大于10,因此表达式$var > 10的值等价于true.这样If语句的第一个MsgBox语句将被执行,从而显示"20 果真大于!".

选择(Select)选择语句的使用也是类似的, 但通常用于判断较多条件,这样比

If/Else 的语句往往要更清晰.

例如:

$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

Switch选择语句和 Select 非常相像,但是它主要用于测试一个变量的不同范围.请看例子:

$var = 30

Switch Int($var)

Case 1 To 10

MsgBox(0, "例子", "$var 为 1 ~ 10的范围之间") Case 11 To 20

MsgBox(0, "例子", "$var 为 11 ~ 20的范围之间")

Case 21 To 30

MsgBox(0, "例子", "$var 为 21 ~ 30的范围之间")

Case 31 To 40

MsgBox(0, "例子", "$var 为 31 ~ 40的范围之间")

Case Else

MsgBox(0, "例子", "$var 不在 0 ~ 40的范围里面") EndSwitch

循环结构

For….Next

While…Wend

Do…Until

With….Endwith

For….In….Next

用户函数

所谓函数是指可在脚本中调用并实现特定"功能"的代码片段. 在 AutoIt 中有两种函数, 包括内建函数和用户函数.

内建函数

内建函数的完整列表请到此处查看, 关于使用内建函数的注意事项请到此处查看.

用户函数

用户可通过使用Func......EndFunc语句来自定义函数.

可按需要定义函数的参数及其返回值.

相关主题
文本预览
相关文档 最新文档