autoit编程,autoit语法,autoit入门教程小结

autoit编程,autoit语法,autoit入门教程小结

对于那些听说过autoit脚本的人来说,下面的介绍性教程是一本很好的教科书。建议你看看。

作者:yonken据我所知,需要编写AutoHotkey/AutoIt脚本实现自动操作的用户很多是网络管理员,其他的可能是一些个人用户。一般都有相当的技术水平,都想用脚本来完成一些以前需要人工操作的重复性任务。但由于语言条件的限制,可能很难理解官方的帮助文档。为了方便读者,我先从最简单的说起。每个例子都尽可能给出了对应的AHK和AU3版本代码。本文会尽可能用比较通俗的语言来描述,但并不是为了解释基本的语法,所以可能不太适合初学者阅读。

本文涉及的AHK/AU3版本:AutoHotkey 1.0.44.08 AutoIt 3.1.1一、关于脚本1。什么是剧本?这是一个非常“流行”的术语。一般来说,脚本是指按照一定的语法规则编写的特定格式的文本文件。你可能听说过很多种脚本:VBScript、JScript、PHP、ASP、JSP、CGI、CS脚本,甚至游戏外挂脚本。这些脚本文件是可执行文件,可以执行相应的操作。AHK脚本文件扩展名:*。ahk AU3脚本文件扩展名:*.au3

2.脚本和程序有什么区别?严格来说,所谓的“程序”是指用各种编程语言(如C/C /C#/Delphi)编写的,由编译器编译的二进制文件,一般是机器码,可以由系统执行。另一方面,脚本只是纯文本文件,包含各种已定义的命令,很像批处理文件。这样我们就得出一个简单的结论,那就是用户一般无法得到“程序”的源代码,只能反汇编成汇编语言代码(或者其他)。当然,有些“程序”是可以拿到源代码的(比如Java);脚本是用户可以直接查看的代码文件,而AHK/AU3提供了一种将脚本文件“转换”成exe文件的方法。

3.脚本是如何工作的?脚本是一种“解释性”语言,它的运行依赖于一个“解释器”,这个“解释器”对脚本的每一条命令(或代码)进行“翻译和解释”,然后执行相应的操作。如果没有严格的定义,HTML和Java都可以视为解释性语言。AutoHotkey.exe和AutoIt3.exe的AHK/AU3的主要节目是他们的“解释者”。如上所述,脚本可以被“转换”成exe可执行文件,不需要相应的解释器就可以独立运行,我们也可以使用相应的工具将其“还原”成脚本文件。所以我们完全可以理解为,脚本代码被“压缩”到这个exe文件里,解释器也在里面,运行exe。

4.如何创建脚本?使用浏览器的右键菜单创建相应的脚本文件,或者创建新的文本文件并更改扩展名。5.给我们讲一点语法规则好吗?a)对于AHK,每个内置函数都是以“command”的形式提供的:Command,param1,param2,…而AU3是以“function”的形式提供的:Function(param1,param2,…)命令或函数中用符号“[”和“]”括起来的参数是可选参数,也就是说这些命令或函数可以省略。如果参数包含空格,最好用双引号将参数括起来。b)解释器从上到下(从第一行到最后一行)“解释”脚本的每一行,除非遇到“Return”、“Goto”、“Gosub”、“Exit”等语句、函数、热键或其他能使脚本“跳转”到某个标识符的条件。c)关键字和标识符(包括变量名、命令名、函数名等。)不区分大小写。

2.运行程序或打开文件1。运行程序Runt命令或函数来运行外部可执行文件,AHK也可以用它来直接打开文件。Ahk: run,target file [,working directory,Max|Min|Hide|UseErrorLevel,output PID变量] AU3: Run('文件名'[,'工作目录'[,flag]])【例2 . 1 . 1】ahk:Run,notepad.exe AU3:Run(')这是因为他们会自动在脚本所在的目录中搜索目标文件,如果是,他们会跑;否则,他们将在系统文件夹(%PATH%)中搜索。注意:a)某些程序必须有一个“工作目录”才能成功运行!b)给出完整的文件路径有助于稍微提高程序的可靠性。C)AHK的Run命令可以用来直接运行程序和打开文件,而AU3的Run函数只能用来运行程序(可执行文件)或者传递参数让一个程序打开目标文件。当然,运行程序的功能不仅仅是这么简单。我们还可以指定程序运行的初始状态,比如让正在运行的记事本窗口以最大化状态显示(或者最小化或者隐藏)【例2 . 1 . 2】ahk:run,notepad.exe,maxau3: run ('notepad.exe ','',@ sw

2.如前所述,AHK的Run命令可以直接打开文件,而AU3的Run函数只能用来运行程序,所以打开文件的方式有些不同:AHK脚本可以直接给出目标文件,AHK会自动运行与文件关联的程序来打开;另一方面,AU3必须通过用户传递参数来让程序打开目标文件。【例2 . 2 . 1】notepad.exe:运行,myfile.txt运行,myfile.txt AU3:运行(' notepad.exe myfile.txt ')

3.要以命令行的形式运行程序,可以考虑运行系统的命令行解释器(cmd.exe/command.com),然后指定要执行的命令并传递参数。假设我们想执行命令“dirC:\WINDOWS\system32”来列出指定目录的所有文件和子目录。【例2 . 3 . 1】ahk:run,% com spec %/KD IRC:\ windows \ system32 au3:run(@ com spec '/KD IRC:\ windows \ system32 ')注:A)ComSpec是脚本中内置的变量或宏,用于指示命令行解释器的位置。b)/k参数的意思是“执行字符串指定的命令,但保留它”。如果改为/c,则表示“执行字符串指定的命令,然后终止”。直观的解释是/k会在命令执行后保留命令提示窗口,而/c会在命令执行后关闭命令提示窗口。c)符号“”是AU3定义的字符串连接符。

4.特殊应用A)打开网页[例2.4.1]

AHK:运行,www.autohotkey.com运行,% A _ program files % \ internet explorer \ ie xplore。EXEwww.autohotkey.com AU3:Run(@ program files dir ' \ internet explorer \ Iexplore.exe www . autohotkey . com ')b)特殊文件夹系统的一些特殊文件夹是用相应的CLSID定义的(请看帮助文档),我们可以用它打开相应的文件夹,比如回收站:[例2.4.2]

ahk:Run:{ 645 ff 040-5081-101 b-9f 08-00aa 002 f 954 e } AU3:不适用!c)运行控制面板工具微软为我们提供了一种通过命令行打开控制面板的工具或项目的方法,比如打开系统属性窗口:[例2.4.3]

ahk:runcontrolsysdm . CP lau 3:run(' controlsysdm . CPL ')关于门禁面板项目的详细介绍,请参见本文:文章地址。d)指定搜索位置并打开搜索窗口。假设我们想打开一个搜索窗口并指定搜索位置,比如C:\: [Example 2.4.4]

Ahk: Run,Findc: \ au3:不适用!e)显示指定文件的属性窗口。假设我们要打开文件“MyFile.txt”的属性窗口,然后使用关键字properties,然后连接到目标文件:[例2.4.5]

Ahk: run,properties myfile.txt au3:不适用!注意:AHK将在退出前自动关闭打开的属性窗口!f)用“资源管理器”打开指定的文件夹。我们知道可以使用Run、explorerC:或Run('explorerC:')打开指定的文件夹,但有时我们需要在Explorer中打开它。这时,我们可以使用关键字Explore:[示例2.4.6]

Ahk: run,explore:au3:run(' explorer . exe/e,c:') g)打印指定的文件。要打印指定的文件,可以使用关键字print:[示例2.4.7]

AHK:运行,printMyFile.txt AU3:不适用!

f)用“资源管理器”打开指定的文件夹。我们知道可以使用Run、explorerC:或Run('explorerC:')打开指定的文件夹,但有时我们需要在Explorer中打开它。这时,我们可以使用关键字Explore:[示例2.4.6]

Ahk AHK:运行,探索C: AU3:不适用!

运行(' explorer.exe/e,d:')

这将打开你所说的树文件。

注意:窗口标题和窗口文本参数总是区分大小写的。1.等待窗口系列命令/函数AHK和AU3都提供了一组用法相似的窗口等待命令/函数:winwait/winwaitactive/winwaitclose。它们用于等待窗口出现,等待窗口被激活,等待窗口被关闭。由于这些命令/函数的参数相似,我们仅以WinWait为例。AHK: WINWAIT [,窗口标题,窗口文本,超时,排除的标题,排除的文本] AU3: WinWait('窗口标题'[,'窗口文本'[,超时]])WINWAIT的作用是在目标窗口出现之前不执行所有后续语句。假设我们想运行记事本程序,并在其窗口出现时提示用户:[示例3.1.1]

AHK: RunNotepad WinWait,无标题记事本MsgBox记事本窗口已经打开!au3:Run(' Notepad ')Win Wait(' Untitled-Notepad ')MsgBox(0,'','记事本窗口已打开!')

2.激活与窗口相关的命令/功能。使目标窗口成为活动窗口的方法是激活它。可用的命令/函数是winactivate: ahk: winactivate [,窗口标题,窗口文本,排除标题,排除文本] AU3: WinActivate('窗口标题'[,'窗口文本'])

3.关闭窗口关闭窗口有两种方式,一种是正常关闭窗口(WinClose),一种是强行关闭窗口(WinKill): AHK: WinClose/WinKill [,窗口标题,窗口文本,超时,排除标题,排除文本] AU3: WinClose/WinKill('窗口标题'[,'窗口标题'

现在我们可以实现一个相对简单的功能。例如,我们可以打开系统属性窗口并等待它出现,在窗口出现后激活它,然后等待3秒钟再关闭它:[示例3.1.2]

Ahk: run,sysdm.cplwinWait,系统属性WinActivate,系统属性WinWaitActive,系统属性Sleep,3000 WinClose,系统属性WinWaitClose,属性au3:run(' control sysdm . CPL ')winwait('系统属性')winwait activate('系统属性')Sleep(3000) WinClose('系统属性')WinWaitClose('系统属性')

建议:如果这些窗口标题在程序中频繁出现,就会出现一个问题:脚本的可读性。也许你会想,这不是很直观吗?但问题是,如果这个重复的窗口标题是一个很长的字符串呢?这样会严重影响整个代码的美观布局。而且我们不知道这些窗口标题的来历,也不知道这个窗口标题是怎么来的。而如果我们定义一个变量(假设变量名为“AppWindow1”)来保存这个窗口标题,就可以在命令/函数中用变量来表示,从而达到让代码意图更加清晰的目的。另外,即使目标软件因为某些原因(比如升级)改变了它的窗口标题,我们也可以很容易地做出改变。

4.更准确的窗口识别方法(主要针对AHK脚本)程序在运行时至少会有一个进程。如果能得到这个进程ID,就可以在一定程度上保证窗口的准确识别。另外,每个窗口都有一个定义好的窗口类名(Class,比如记事本窗口的类名是Notepad),所以我们可以排除其他不同于目标窗口的窗口类。其实我们有一个更准确的方法:每个窗口(包括控件)都被Windows分配了一个唯一的标识符(ID),这个标识符叫做窗口句柄(HWND)。直接给一个窗口标题来表示一个窗口的一个缺点是,不能保证该窗口在脚本运行过程中始终是操作目标,因为在这个过程中很可能会出现其他同名的窗口(或者满足匹配条件的窗口)。如果我们用这个标识符来表示一个窗口,自然可以保证一个命令/函数的操作窗口总是同一个窗口。我们来看看获取窗口句柄的命令/函数:ahk: winget [,output变量,ID,window title,window text,excluded title,excluded text]AU3:WinGetHandle(' window title '[,' window text'])其中WinGet获取的窗口ID会通过“output变量”返回,WinGet的返回值就是获取的窗口ID。

当我们进行自动化时,我们需要先运行某个程序。如何才能让这个程序运行成功后显示出窗口句柄?比较安全的方法是先获取这个程序的进程ID,然后根据这个进程ID获取它的窗口句柄。AHK支持使用进程ID作为窗口标题;但是,AU3不支持这种用途。只能先获取窗口的类名再根据类名获取窗口句柄(不够安全):【例3 . 1 . 3】AHK:运行,记事本,THIS PID WINWAIT,AHK _ PID% THIS PID%

;这里的ahk_pid表示以下变量是进程ids winget,thisid,id,ahk _ PID% thispid%。

;这个ID将保存获得的窗口句柄AU3:

Opt ('wintitlematchmode ',4)run(' notepad ')$ handle=wing ethandle(' class name=notepad ')现在暂且忘记AU3,因为它的窗口函数一般不支持使用窗口句柄作为(窗口标题)参数。至于在AHK如何使用窗口句柄,简单来说就是所有带“窗口标题”参数的命令都可以用窗口句柄代替,比如:【例3 . 1 . 4】AHK:运行,记事本,这个PID。

;首先获取正在运行的记事本程序的进程ID WinWait,不带标题-notepad ahk_pid%ThisPID%

;等待此流程的窗口出现。WinGet,ThisHWND,ID,无标题-记事本ahk_pid%ThisPID%

;获取窗口句柄WinActivate,ahk _ id % ThisHWND %这里的ahk_id表示下面的变量是窗口句柄winwaitactive,ahk _ id% thishwnd% sleep,3000 winclose,ahk _ id% thishwnd% winwaitclose,ahk _ id% thishwnd%。

1.自模拟鼠标点击(按钮等。)控件模拟用户操作,它自然包括模拟鼠标点击。命令/功能:Click/MouseClick/ControlClick,其中Click/MouseClick用于模拟用户的物理操作(Click),将鼠标点击事件发送到指定的坐标位置(相对于当前窗口或绝对位置),但这种方法不能保证100%的准确性。屏幕分辨率、用户干扰、系统环境都会影响它们的执行结果,而ControlClick直接将鼠标点击事件发送给目标窗口的目标控件,更加准确。一般我们不考虑按坐标位置点击。这里我们只以ControlClick为例:ahk: ControlClick [,目标控件或坐标位置,窗口标题,文本,鼠标按钮,点击次数,选项,排除标题,排除文本] AU3: ControlClick('窗口标题','窗口文本',控件ID[,按钮] [,点击次数])对于ahk来说,“目标控件”参数是指要点击的控件的类名(ClassNN)或控件文本,也可以使用控件句柄。

问:使用什么工具来获得目标控件的这些信息?答:ahk用户请使用AutoIt3WindowSpy,AU3用户请使用AutoItWindowInfo,可以在相应的开始菜单项中找到,也可以在安装目录中查找。

问:如何使用这两个工具?答:首先打开你要操作的目标窗口,然后运行AutoIt3WindowSpy或者AutoItWindowInfo,然后将鼠标移动到目标控件(比如一个按钮)上:AutoIt3WindowSpy使用demo的截图:

AutoIt窗口信息使用演示截图:

现在,假设系统属性窗口已经打开并激活,任务是点击它的确定按钮,可以使用以下方法:【例4 . 1 . 1】AHK:控件点击,确定,系统属性控件点击,按钮2,系统属性。

AU3:

Click('系统属性','',1)ControlClick('系统属性','',' Button2')ControlClick('系统属性','',' OK ')提醒:即使目标窗口或控件被隐藏,ControlClick命令也可以“点击”目标控件,但不能保证成功率。

2.模拟键盘操作键盘也是我们在操作windows时会用到的工具,比如安装软件时经典的“一路回车”。下面简单介绍一下模拟键盘操作的方法。这是最直接的方法,模拟用户的按键行为,直接发送按键命令。其用法请参考官方文档,此处不做解释。最简单的应用――按回车键:AHK:

运行,控制Sysdm.cplWinWait,系统属性Send,{Enter}AU3:

运行(' Control sysdm . CPL ')WinWait(' system properties ')Send(' { Enter } ')

常用组合键——Alt X/Ctrl N等。经常在安装软件时提供一个按钮“下一步(N)”,表示按Alt N可以触发相当于点击这个按钮的效果,其他的可以绕过。以在记事本窗口打开文件菜单为例:AHK:

Run,NotepadWinWait,untitled-notepad WinActivate,untitled-notepad WinWaitActive,untitled-notepad Send!故障3:

run(' Notepad ')win wait(' untitled-Notepad ')win activate(' untitled-Notepad ')WinWait active(' untitled-Notepad ')Send('!f’)

动词(verb的缩写)易入门系列自动化操作5扬肯

但在实现自动化时,仅靠上述技术往往难以达到预期目标。让我们开始最重要的控制操作。1.设置文本在安装软件的过程中,用户经常需要提供一些必要的信息,比如安装目录。很多用户不喜欢把软件安装到默认的c盘,更喜欢安装到别的地方。那么脚本为我们提供了什么方法来修改如下图所示的路径呢?

我们先用上面提到的AutoIt3 Window Spy或者AutoIt Window Info来获取这个路径的编辑框信息。假设这个窗口的标题是Setup foobar,这个路径的编辑框类名是Edit1,我们需要把它改成“D:\foobar2000”。接下来可以使用以下命令/函数来设置它的文本:AHK:ControlSetText [,目标控件,新文本,窗口标题,窗口文本,排除标题,排除文本] au3: controlsettext('窗口标题','窗口文本',控件ID,'新文本'的具体用法如下:[示例5.1.1] ahk: controlsettext,edit1,d: \ foobar2000,setup foobarau3:

ControlSetText('Setup foobar ','',' Edit1 ',' D:\foobar2000 ')

2.选中和取消选中单选框和复选框项目。有时程序需要用户提供更多的信息,以满足用户的个性化设置。我们经常会遇到这样的情况:

如何保证必选项目被选中,部分项目被取消?先介绍一下AHK和AU3中用来设置控件各种属性的命令/函数:AHK:Control [,命令,值,目标控件,窗口标题,窗口文本,排除标题,排除文本] ]AU3:ControlCommand('窗口标题','窗口文本',控件ID,'命令','选项')

其中,“命令”是让我们指定进行何种设置的参数。对于这些单选/复选框按钮,适用的命令是“选中”和“取消选中”。假设这个窗口的标题是Setup foobar,我们打算这样做:选中它的桌面复选框(按钮5),取消选中快速启动栏复选框(按钮7);检查“0.7x”单选按钮框(按钮14)。

那么具体用法举例如下:【例5 . 1 . 2】AHK:控件,复选,button5,foobar控件,未复选,button7,foobar控件,复选,button14,foobar au3:

ControlCommand('foobar ','',' Button5 ',' Check ','')ControlCommand('foobar ','',' Button7 ',' UnCheck ','')ControlCommand('foobar ',' ',' Button14 ',' Check ',' ')

2.在下拉列表中选择项目。相信你一定遇到过以下情况:

问题又来了:如何挑选自己需要的物品?答案还是用上面提到的命令/函数。对于这类控件,AHK适用的命令是“Choose,N”和“ChooseString,String”,分别表示选中第N项,选中与字符串String匹配的项;AU3适用的命令是“SetCurrentSelection,N”和“SelectString,String”,分别表示选中第N个(注意是从零开始表示!)项,并检查与字符串String匹配的项。

假设我们要选择第五项“简体中文”,那么具体用法举例如下:

【例5 . 1 . 3】AHK:控件,choose,5,combobox1,installer控件,choose string,简体中文,combobox1,installerau3:控件命令(' installer ','',' combobox1 ',Setcurrentselection),4)控件命令(' installer ','',' combobox1 ',' selectstring ','简体中文)

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: