1、AutoIt Introduce,2010-07-15,目录,第一节 AutoIt基础1. 关于AutoIt2. 变量、常量和数据结构3. 运算符4. 流程控制5. 用户函数6. 基本语言规则第二节 窗口/控件1. 定义窗口/控件 2. 标识窗口/控件3. 进阶窗口/控件,第三节 常用函数1. 窗口/控件管理2. GUI管理3. 消息框与对话框4. 鼠标管理5. 键盘管理6. 数学管理7. Timer与延迟管理8. 文件与目录管理 9.字符串管理10.进程管理第四节 范例1. 窗口程序2. 输入输出对话框3. 键盘与鼠标4. 文件操作5. 程序运行,1.关于AutoIt 介绍 AutoIt 是
2、一个可以自动化操作windows界面、使用类BASIC脚本语言的免费软件。特点:模拟键盘,鼠标操作,直接对窗口/控件动作,小巧易用等。 当前版本:汉化版AutoIt 3.3.6.1 官方网址是http:/ Au3 在线中文帮助文档:http:/ 安装目录 SciTe编辑器(AutoIt语法高亮) 帮助文档 辅助工具:AutoIt Window Info ,compile tool , run tool 如何运行 脚本文件:*.au3 F5编译运行 脚本经编译生成*.exe可执行文件,2.变量/常量和数据类型 数据类型 AutoIt只有一种数据类型,Variant。 变量 变量的命名都要以 $
3、开始,包含字母,数字和下划线。 变量声明关键字:Dim, Local, Global, 如:Dim $var1Dim $var1,$my_variableDim $var1=1,$my_variable=“变量2”注:可以在未声明的时候给变量赋值。 常量 常量声明关键字:Const,如:Const $const1 = 1, $const2=12声明的常量可以用Enum (枚举常量)关键字进行初始化,如:Global Enum Step +2 $const1, $const2, $const3 ;0,2,4,6,3.运算符AutoIt 支持以下这些赋值符号,数学运算符,比较和逻辑运算符。,赋值符
4、号 = 赋值 += 自增. -= 自减. *= 自乘. /= 自除. &= 连续. 数学运算 + 相加. - 相减. * 相乘. / 相除. & 字符串连接. 幂.,比较符号 = 相等(值比较,不区分大小写). = 相等(字符串比较,区分大小写). 不相等. 大于. = 大于或等于 小于. = 小于或等于.逻辑运算 AND 与. OR 或. NOT 非.,注: 判断两个值是否不相等. 不区分字符串大小写. 要比较一个大小写敏 感的不等于操作使用 Not (“string1“ = “string2“),4.流程控制 选择语句 单一条件选择语句:If.Then 双条件选择语句:If.Else.En
5、dIf 多条件选择语句:If.ElseIf.Else.EndIf注:条件选择语句中的ElseIf 可以接无数条。 分支语句 第一种:Select.Case.EndSelect 第二种:Switch.Case.EndSwitch注:Select 可以同时判断多个条件,而Switch 则只能一次判断一个条件。 循环语句 有限循环为:For.To.Step.Next 无限循环第一种:While.Wend 无限循环第二种:Do.Until注:ExitLoop 关键字是用来跳出循环的。 当多层循环嵌套时, ExitLoop后面接一个数字,表示第几层循环(后面没跟数字时,表示使用默认值1,跳出最靠近它的循
6、环)。,5.函数除了AutoIt内置函数,用户可以声明自定义函数。 自定义函数 使用关键字:Func.Return.EndFunc 函数的参数传递 传值,顾名思义就是传递数值。 传址(ByRef),就是传递地址,将实参的内存地址传递给形参,即让形参和实参使用相同的内存单元。 函数的变量作用域 局部变量,只在函数内部起作用,不会影响到函数外部(即使在函数外部存在另一个同名变量)。 全局变量,它的作用范围是整个程序。 函数的嵌套与递归 函数的嵌套,就是在一个函数中调用另一个函数。 函数的递归,就是在函数中调用函数,不过与嵌套的区别在于,嵌套是调用其它函数,而递归则是调用自身。,6.基本语言规则 注
7、释 单行注释:分号 “;” 块注释:#comments-start或#cs 注释块开始#comments-end或#ce 注释块结束注:不能注释它们自己! 包含文件#include “路径文件名” 用户编写的文件名#include 库文件(Include中预定义的用户函数 续行符 续行符:下划线 “_” 注:续行符前需有空格 宏 AutoIt 提供了一组宏(Macros),以开头。预定义宏可以像变量一样使用,但是不能被重新赋值。如: CRLF,CR+LF,回车换行符,用于换行 DesktopCommonDir,公共 Desktop 文件夹路径(桌面) MyDocumentsDir,我的文档的路
8、径. ProgramFilesDir, Program Files 文件夹路径. ScriptDir,脚本所在目录. (不包含反斜杠符号“) ScriptName,当前运行的脚本的长文件名,1.定义窗口/控件 窗口和控件,是Windows图形化用户界面的基础。窗口,可接收用户输入的信息,并向用户输出处理的结果。 控件,窗口的重要组成部分,如输入框、按钮、列表框、文本编辑框等。2.标识窗口/控件 使用AutoIt编写自动化操作的脚本的时,在对窗口/控件操作的函数(Win*和Control*)中,都需要对窗口/控件标识定位。 定位窗口的标识属性:标题(Title),窗口文本(Text)。 定位控件
9、的标识属性:控件ID (ID),文本(Text),类(Class),接口(Instance),类别名(ClassnameNN)。控件句柄 (Handle)/窗口句柄(HWND),是Windows赋予控件/窗口的唯一标识符,可用来标识控件/窗口。 可用ControlGethandle函数获得。注: AutoIt 仅支持标准的 Microsoft 控件 - 某些应用程序是自制的控件,只是看上去像标准microsoft控件,这样的情况AutoIt是无法处理的。,3.进阶窗口/控件 窗口标题匹配模式 窗口用Title定位,默认的匹配模式为“只匹配标题的前面部分 ”。 通过函数 AutoItSetOpt
10、ion 修改 WinTitleMatchMode 属性,可更改此匹配模式。控件属性格式 定位控件可用格式:PROPERTY1:Value1; PROPERTY2:Value2如果只写一个数字,表示用的控件的ID;如果只写了一个字符串,表示用的控件的ClassnameNN/Text。如:ControlSend(“Untitled -“, “, “CLASS:Edit; INSTANCE:1“, “some text“)ControlSend(“Untitled - Notepad“, “, “CLASSNN:Edit1“, “some text“)ControlSend(“Untitled -
11、Notepad“, “, “Edit1“, “some text“)ControlClick(“My Window“, “, “ID:254“)ControlClick(“My Window“, “, 254)注:获得窗口/控件的属性,可使用窗口信息工具(AutoIt Window Info Tool),1.窗口管理 窗口管理 激活指定的窗口(设置焦点到该窗口,使其成为活动窗口).WinActivate ( “窗口标题“ , “窗口文本“ ) 检查指定的窗口是否存在且当前被激活.WinActive ( “窗口标题“ , “窗口文本“ ) 关闭指定窗口.WinClose ( “窗口标题“ , “
12、窗口文本“ ) 移动指定的窗口或调整窗口的大小.WinMove( “窗口标题“, “窗口文本“, X坐标, Y坐标 , 宽度 , 高度,速度 ) 获取指定窗口的内部句柄.WinGetHandle ( “窗口标题“ , “窗口文本“ ) 控件管理 向指定控件发送鼠标点击命令.ControlClick ( “标题“, “文本“, 控件ID , 按钮 , 点击次数 , X坐标 , Y坐标 ) 向指定控件发送命令.ControlCommand ( “窗口标题“, “窗口文本“, 控件ID, “命令“ , “选项“ ) 修改指定控件的文本.ControlSetText ( “窗口标题“, “窗口文本“,
13、 控件ID, “新文本“ ,标志 ) 获取指定控件上的文本. ControlGetText ( “窗口标题“, “窗口文本“, 控件ID),2.GUI管理 创建一个 GUI 窗口.GUICreate ( “窗口标题“ , 宽度 , 高度 , 左侧 , 顶部 , 样式 , 扩展样式 , 父窗口 ) 删除指定窗口和它包含的所有控件. GUIDelete ( 窗口句柄 ) 为已知的Windows 消息代码(WM_MSG)注册一个用户自定义的函数. GUIRegisterMsg ( msgID, “函数“ ) 调整窗口的状态. GUISetState ( 标志 , 窗口句柄 ) 在GUI上创建一个按钮
14、控件. GUICtrlCreateButton ( “文本“, 左侧, 顶部 , 宽度 , 高度 , 样式 , 扩展样式 ) 在GUI上创建一个静态标签(Label)控件. GUICtrlCreateLabel ( “文本“, 左侧, 顶部 , 宽度 , 高度 , 样式 , 扩展样式 ) 捕获窗口消息. GUIGetMsg ( 高级模式 ) 当一个系统按钮被点击时调用一个用户自定义函数(UDF). GUISetOnEvent ( 特殊ID, “函数名“ , 窗口句柄 ),3. 消息框与对话框 显示一个输入框以供用户输入数据.InputBox ( “标题“, “提示信息“ , “默认数据“ ,
15、“密码字符“ , 宽度, 高度 , 左方, 顶部 , 超时时间 ,句柄 ) 显示一个简单的对话框(可设置超时属性).MsgBox ( 标志, “标题“, “文本“ , 超时时间 , 句柄 )4. 鼠标管理 执行鼠标点击操作.MouseClick ( “按钮“ , X坐标, Y坐标 , 点击次数 , 速度 ) 移动鼠标指针.MouseMove ( X坐标, Y坐标 , 速度 ),按钮对应的值: 0=确定 1=确定 和 取消 2=终止、重试、忽略 3=是、否、取消 4=是 和 否 5=重试 和 取消 6=取消、重试、继续,提示图标对应的值: 0= 无图标 16=警告标志 32=问号图标 48=感叹
16、号图标 64=消息通知,5. 键盘管理 向激活窗口发送模拟键击操作. Send ( “按键“ , 标志 ) 为Ctrl键, !为Alt键, +为Shift键, #为Win键 等等例:Send(“!a“) ; Ctrl+Alt+aSend(“+TAB“) ; Shift+Tab注:支持发送组合按键,但不允许模拟 “CTRL-ALT-DEL” 组合键。 6. 数学管理 求某个数的绝对值. Abs ( 表达式 ) 产生一个伪随机的浮点数. Random ( 最小值 , 最大值 , 标志 ) 7. Timer与延迟管理 使脚本暂停指定时间段.Sleep ( 延迟 ) 延迟时间(以毫秒为单位). 注:此
17、延迟并不绝对准确. 返回当前时间戳(以毫秒为单位).TimerInit ( )返回当前与上一次调用TimerInit()之间的时间间隔.TimerDiff ( 时间戳 ),8. 文件与目录管理 向新建一个目录/文件夹.DirCreate ( “路径“ ) 复制指定目录及其所有子目录和文件 DirCopy ( “源目录“, “目标目录“ , 标志 ) 移动指定目录及其所有子目录和文件 DirMove ( “源目录“, “目标目录“ , 标志 ) 删除一个目录/文件夹.DirRemove ( “路径“ , 递归遍历 ) 复制一个或多个文件.FileCopy ( “源文件“, “目标路径“ , 标志
18、 ) 删除一个或多个文件.FileDelete ( “路径“ ) 检查指定文件或目录是否存在.FileExists ( “路径“ ) 9. 字符串管理 求检查某个字符串是否含有指定的子字符串.StringInStr ( “字符串“, “子字符串“ , 区分大小写 , 出现次序 , 开始 , 数量 ),10. 进程管理 运行外部程序.Run ( “程序“ , “工作目录“ , 显示标志, 可选标志 )程序:程序所在的完整路径(文件格式为 exe,bat,com 或 pif).注:路径中含有空格需要使用引号引起来。要运行 DOS(控制台)命令,可使用以下格式,不要忘了 “/c” 前的 “ ”: R
19、unWait(ComSpec 如:Run(“Control sysdm.cpl”) ;打开系统属性窗口RunWait(ComSpec & “ /c dir d:123.txt“,SystemDir,SW_SHOW);System文件夹所在路径下作dir,并将显示结果打印到d:123.txt中。运行一个外部程序并暂停脚本的执行直至该程序执行完毕。RunWait ( “程序路径“ , “工作目录“ , 显示标志 , 可选标志 )Run用在运行指定程序后脚本将(立即)继续执行后面的语句。RunWait用在指定程序执行完毕之前暂停脚本的执行。,1.窗口程序 基本窗口程序。详见范例:1.0 消息处理模式
20、 窗口程序程序运行期间会不断的产生消息,Windows 系统根据不同的消息,来响应不同的操作。为了不错过这些消息我们有两种方式来处理:消息循环模式(MessageLoop)(默认)模式和事件模式(OnEvent)。消息循环模式是不断的循环消息,以达到不错过的目的。操作可简单,但系统资源的耗费大,响应延迟高。 事件模式是使用Event 模式,当产生事件时就进行响应。推荐使用。消息循环是默认的模式.若要切换为 OnEvent 模式需使用 Opt(“GUIOnEventMode“,1) 语句. 详见范例:1.1,消息拦截 我们可以拦截窗口的很多消息,比如窗口移动、列表控件的双击、单击消息,组合列表框
21、控件的点击、选择消息等。注:使用此种方法来拦截消息仅限于对自己编写的程序的窗口。详见范例:1.2父窗口与子窗口 在实际的应用中,程序可能需要用到多窗口来实现。窗口与窗口之间的关系除了平等之外,还有父子窗口。 函数GUICreate 最后一个参数可以为新建的窗口指定父窗口的句柄。GUICreate ( “窗口标题“ , 宽度 , 高度 , 左侧 , 顶部 , 样式 , 扩展样式 , 父窗口 ) 父窗口可选参数 另外一个已创建窗口的句柄,此(新创建的)窗口将成为该窗口的子窗口.详见范例:1.3嵌入外部进程窗口 嵌入外部进程窗口,属于一种特殊的父子窗口,就是一个窗口被镶嵌在另一个窗口内部,无法取出一
22、样。AutoIt 可以使用API 来达成这种效果。详见范例:1.4,2. 输入输出对话框 对话框最主要的包括输入(InputBox)和输出(Msgbox)两大类,均可做多种样式设定。详见范例:2.0 3. 键盘与鼠标 鼠标函数MouseClick可以用来灵活处理非标准控件,但不如标准控件函数ControlClick方便。详见范例:3.0 4. 文件操作 包括文件内容的打开、关闭、读写、修改等。详见范例:4.0 5. 程序运行 要在运行指定程序后脚本将(立即)继续执行后面的语句,使用Run。 若要在指定程序执行完毕之前暂停脚本的执行则使用 RunWait 。详见范例:5.0,Q & A Thanks!,