据我了解需要编写AutoHotkey/AutoIt脚本来实现自动化操作的用户很多都是网管,其它则可能是一些个人用户,他们一般都具有相当的技术水平,而且都希望能借助脚本来完成某些以往需要人工操作的重复性劳动,但限于语言条件上的限制可能对官方的帮助文档有较难理解之处。为方便读者,我将从最简单的说起,每个示例尽可能同时给出相应的AHK和AU3版本代码。本文将尽可能用较通俗的语言描述,但并不打算讲解语法基础,所以不一定适合新手阅读。
文中涉及到的AHK/AU3版本:
AutoHotkey
1.0.44 .08
AutoIt
3.1.1
一、关于脚本
1、什么是脚本?
这是个非常“流行”的术语了,通俗而言脚本(Script)一般都是指根据某种语法规则编写的具有特定格式的文本文件。可能大家已经听说过很多种脚本:VBScript、JScript、PHP、ASP、JSP、CGI、CS脚本,甚至游戏外挂脚本。
这些脚本文件都是可执行文件,可执行相应的操作。
AHK 脚本文件扩展名:*.ahk
AU3 脚本文件扩展名:*.au3
2、脚本和程序的不同?
严格来说,所谓“程序”就是指以各种编程语言(比如说C/C++/C#/Delphi)编写、由编译器编译好后的二进制文件,一般就是机器代码,可由系统执行。而脚本则是只是些纯文本文件,包含了各种定义好的命令,这一点很像批处理文件。这样,我们得出一个简单的结论,那就是用户一般无法获得“程序”的源代码,我们只能进行反汇编把它逆向还原为汇编语
言代码(或其它),当然,也有些“程序” 是可以获得源代码的(比如Java);脚本则是用户可直接查看的代码文件,而AHK/AU3则提供了把脚本文件“转换”成exe文件的方法。
3、脚本如何运行?
脚本是“解释性”的语言,它的运行依赖一个“解释器”,由这个解释器来“翻译并解释”脚本的每条命令(或者说代码),然后执行相应操作。如果不严格定义的话,HTML和Java都可以认为是解释性语言。AHK/AU3的主程序(分别是和)就是它们的“解释器”,上面提到脚本可“转换”成可脱离相应的解释器而独立运行的exe可执行文件,而我们还可以使用相应的工具把它们“还原”成脚本文件,由此我们完全可以这么理解:脚本代码是被“压缩”到这个exe文件中,解释器也是在里面,在运行exe时实际上是先“解压”脚本代码然后运行解释器并解释该脚本。
4、如何创建脚本?
使用资源管理器的右键菜单即可创建相应脚本文件,或者新建一个文本文件后改扩展名即可。
5、稍微介绍一点语法规则?
A)对AHK而言,每个内建的功能都是以“命令”的形式提供:
Command, param1, param2,…
而AU3则以“函数”的形式提供:
主角是杨戬的封神小说Function(param1, param2, …)
命令或函数中被符号“[”和“]”围住的参数是可选参数,表示在使用这些命令或函数时可省略它们(不给出具体数值)。
若某个参数含有空格,则最好使用双引号围住该参数。
B)解释器自上而下(从第一行到最后一行)“解释”脚本的每行语句,除非遇到“Return”、“Goto”、“Gosub”、“Exit”等语句、函数、热键或其它能使脚本“跳”到某个标识符的条件成立。
amaze ui中文文档C)关键字和标识符(包括变量名、命令名、函数名等)都不区分大小写。
二、运行程序或打开文件
1、运行程序
Run t命令或者函数用来运行外部可执行文件,AHK还可利用它来直接打开文件。
AHK:
Run, 目标文件 [, 工作目录, Max|Min|Hide|UseErrorLevel, 输出PID变量]
AU3:
Run ( "文件名" [, "工作目录" [, 标志]] )
【示例 2.1.1 】
AHK:
Run,
AU3:
Run("")
上面的示例中都没有给出程序“”的路径,为什么仍能执行?这是因为它们都会自动在脚本所在目录下搜寻目标文件,如有则运行,否则就到系统文件夹(%PATH%)中搜寻。
注意:
A)某些程序必须给定“工作目录”才能成功运行!
B)给出完整的文件路径有助于轻微提高程序的可靠性。
C)AHK的Run命令可以用来运行程序和直接打开文件,而AU3的Run函数则只能用来运行程序(可执行文件)或传递参数让某个程序打开目标文件。
当然,运行程序的功能还不仅仅是这么简单,我们还可以指定运行程序的初始状态,比如让运行的记事本窗口以最大化状态显示(或者最小化、隐藏):
【示例 2.1.2 】
AHK:
Run, , , Max
AU3:
Run("", "", @SW_MAXIMIZE)
2、打开文件
前面已经提到,AHK的Run命令可以直接打开文件,而AU3的Run函数则只能用来运行程序,因此在打开文件的方式上有点不同:AHK脚本中可直接给出目标文件,而AHK将自动运行该文件的关联程序来打开它;而AU3则必须由用户自己传递参数让某个程序打开目标文件。
【示例 2.2.1 】
AHK:
Run,
Run,
AU3:
Run(" ")
3、以命令行形式运行程序
可以考虑运行系统的命令行解释器(/command),然后指定要执行的命令并传递参数。
假设我们要执行命令“dir C:\WINDOWS\system 32” ,用以列出指定目录的所有文件及子目录。
【示例 2.3.1 】
AHK:
Run, %ComSpec% /k dir C:\WINDOWS\system32
AU3:
Run(@ComSpec & " /k dir C:\WINDOWS\system32")
注意:
A)ComSpec是脚本内建的用以指示命令行解释器位置的变量或宏。
B)/k 参数表示“执行字符串指定的命令但保留”,若改为 /c 则表示“执行字符串指定的命令然后终断”。对此比较直观的解释是 /k 将在执行完命令后保留命令提示窗口,而 /c 则将在执行完命令之后关闭命令提示窗口。
C)符号“&”是AU3定义的字符串连接符。
4、特殊应用
A)打开网页
【示例 2.4.1 】
AHK:
Run, www.autohotkey
Run, %A_ProgramFiles%\Internet Explorer\IEXPLORE.EXE www.autohotkey
AU3:
Run(@ProgramFilesDir & "\Internet Explorer\IEXPLORE.EXE www.autohotkey")
B)打开特殊文件夹
系统的某些特殊文件夹被定义了相应的CLSID(请查看帮助文档),我们可利用它来打开相应的文件夹,比如打开回收站:
【示例 2.4.2 】
AHK:
Run ::{645ff040-5081-101b -9f 08-00aa 002f 954e}
AU3:
不适用!
C)运行控制面板工具
微软已经为我们提供了通过命令行打开控制面板某个工具或项目的方式,比如打开系统属性窗口:
【示例 2.4.3 】
AHK:
Run control sysdm.cpl
AU3:
Run("control sysdm.cpl")
关于访问控制面板项目的详细介绍请查看此文:文章地址。
D)指定搜索位置并打开搜索窗口
假设我们要打开一个搜索窗口,而且要指定搜索位置,比如C:\:
【示例 2.4.4 】
AHK:
Run, find C:\
AU3:
不适用!
E)显示指定文件的属性窗口
假设我们要打开文件“”的属性窗口,则使用关键字properties 然后接上目标文件即可:
【示例 2.4.5 】
AHK:
Run,
AU3:
不适用!
注意:AHK在退出前将自动关闭打开的属性窗口!
F)用“资源管理器”打开指定文件夹
我们知道使用Run, explorer C: 或Run("explorer C:") 即可打开指定的文件夹,可是有时候我们需要在资源管理器中打开它,这时可使用关键字 explore:
【示例 2.4.6 】
AHK:
Run, explore C: js切割字符串的方法
AU3:
run(" /e,C:\")
G)打印指定文件
要打印指定文件,可使用关键字 print:
【示例 2.4.7 】 execution几种切面方式
AHK:
Run,
AU3:
不适用!
prototype属性的作用F)用“资源管理器”打开指定文件夹
我们知道使用Run, explorer C: 或Run("explorer C:") 即可打开指定的文件夹,可是有时候我们需要在资源管理器中打开它,这时可使用关键字 explore:
【示例 2.4.6 】
AHK:
Run, explore C:
AU3:
不适用!
run(" /e,d:\")
这样就可以做到你说的打开树状文件了
注意:窗口标题和窗口文本参数总是对大小写敏感的。
1、等待窗口系列命令/函数
AHK和AU3都提供了用法类似的一组窗口等待命令/函数:WinWait/WinWaitActive/WinWaitClose。
它们分别用于等待窗口出现、等待窗口被激活、等待窗口被关闭。由于这些命令/函数的参数类似,现仅以WinWait为例说明。
AHK:
WinWait [, 窗口标题, 窗口文本, 超时时间, 排除标题, 排除文本]
AU3:
WinWait ( "窗口标题" [, "窗口文本" [, 超时时间]] )
WinWait 的作用是在目标窗口出现之前不再执行后面的所有语句。
假设我们要运行记事本程序,并在其窗口出现时提示用户:
【示例 3.1.1 】
AHK:
Run Notepad
WinWait, 无标题 - 记事本 properties文件用什么打开
MsgBox 记事本窗口已被打开!
AU3:
Run("Notepad")
WinWait("无标题 - 记事本")
MsgBox(0, "", "记事本窗口已被打开!")
2、激活窗口相关命令/函数
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论