版本v1.1.08.01©2003-2010ChrisMallett,portions©AutoItTeamandtheAHKcommunitySoftwareLicense:GNUGeneralPublicLicense警告:由于在AutoHotkey和AutoHotkey_L之间存在一些根本的不同。为AutoHotkey编写的脚本在AutoHotkey_L中可能不会像预期的那样工作。对于已知的兼容性问题和解决方案的细节,参考如下:脚本兼容性:UnicodevsANSI,DllCall,NumPut/Get,其他变化。脚本代码文件:以UTF-8保存。AutoHotkey,AutoHotkey_L和编译的脚本常常引发杀毒软件的误报。更多的信息请查看FAQ社区。快速参考基本原理:初学者教程支持AutoHotkey的文本编辑器常见问答脚本命令变量和表达式函数对象交互程序调试键盘和鼠标:热键(鼠标,遥感和键盘快捷键)热字和自动取代重新映射建和按钮键,鼠标按钮和遥感控制列表其他:DllCall正则表达式快速参考AutoHotkey_L特征感谢特别感谢JonathanBennett在1999年慷慨地将AutoItv2作为免费软件放出使它成为我和世界上其他人的灵感和节省时间的工具。另外,一些AutoItv2控制台的AutoHotkey增强功能,像WindowSpy和旧的脚本编译器,直接改编于AutoItv3的源代码。所以感谢Jon和其他AutoIt的作者。最后,没有其他的这些个人AutoHotkey也不能成为今天的样子。~ChrisMallett教程概述这份简介能帮助你马上开始撰写你自己的宏命令和热键。创建一个脚本每一个脚本都是包含要被程序(AutoHotkey.exe)执行的命令的纯文本文件。脚本也可能包含热键和热字,甚至完全由它们组成。然而,缺乏热键和热字的脚本将会按从上到下的顺序执行它的命令在它被触发的瞬间。创建一个新脚本:1.下载并安装AutoHotkey。2.右键桌面或你选择的文件夹的空白位置。3.在弹出菜单中选择:新建—〉AutoHotkeyScript。4.输入文件名,确保由.ahk结尾。例:Text.ahk5.右键文件选择编辑脚本。6.在新的空行中键入:#space::Run在上面这一行中,第一个字符“#”代表Windows键;所以#space表示按住Windows键然后按下空格键来激活热键。::表示后面的命令在热键被按下时执行,在这个例子中就是进入Google的网页。尝试这个脚本,按如下继续:1.保存并关闭文件。2.双击文件来激活它。一个新的图标出现在任务栏通知区。3.按住windows键再按下空格键。一个网页在默认的浏览器中打开。4.要退出或编辑这个脚本,右键任务栏通知区的绿色“H”图标。注释:1.多个脚本能同时运行,每一个在任务栏通知域都有一个自己的图标。2.每个脚本都能有多个热键和热字。3.在开始菜单的启动文件夹里创建一个快捷方式可以让脚本在开机时自动启动。打开一个程序或文档Run来打开一个程序,文档,URL或者快捷方式。这里是一些命令的例子:一个热键可以被分配给任何一个上述的例子通过包含一个热键标签。下面的第一个例子的热键是Win+N,而第二个是Control+Alt+C:RunNotepadRunC:\MyDocuments\AddressList.docRunC:\MYDocuments\MyShortcut.lnkRun@somedomain.com上面的例子被称为单行热键因为每个都只包含一个命令。若要通过一个热键执行多个命令则把热键的定义写在第一行之下,然后在在最后一行写上return。例:如果要执行的程序或文档没有与系统集成,则指定它的完整路径来使它获得执行:上面这个例子,%A_ProgramFiles%是一个内置变量。通过使用它而不是C:\ProgramFiles脚本会更轻便,也意味着它更能在别的电脑上执行。注意:命令和变量的名字并不区分大小写。例如:“Run”跟“run”是一样的,“A_PromgramFiles”和“a_programfiles”是一样的。用RunWait来代替Run可以使脚本在继续运行之前等待应用程序或文档关闭。下面的例子中MsgBox命令在用户关闭Notepad之前不会执行:了解更多的关于打开应用程序—例如传递参数,指定工作目录和发现程序退出代码—点击这里。发送击键和鼠标点击使用Send命令能将击键发送到当前活动(居于最上层的)窗口。在接下来的例子中,Control+Alt+S成为一个输入签名的热键(在按下之前确保类似于编辑或右键起草的窗口是活动的):在上面的例子中所有的字符被逐一输入除了模拟按下回车的{Enter}。下一个例子演示了一些其他的常用字符:上面这一行发送了一个Control+C后跟Alt+Tab接着字符串“pasted”最后是Control+V。查看Send命令关于特殊字符和快捷键的完整列表。最后,击键也能通过你键入的缩略词发送,就是所谓热字。例,无论何时你输入btw后接空格或逗号,下面这一行都会将它取代为“Bytheway”:#n::RunNotepad^!c::Runcalc.exe#n::Run(Notepadhasbeenclosed).^!s::SendSincerely,{Enter}JohnSmithReturnSend^c!{tab}pasted:^v鼠标点击:发送鼠标点击给一个窗口,首先需要确定点击发生的X,Y的坐标。这可以通过AutoHotkey附带的WindowSpy完成。下面的步骤是应用WindowSpy的方法:1.通过脚本的托盘图标菜单或开始菜单打开WindowSpy。2.激活目标窗口通过点击它的标题栏,alt+tab切换或其他方法(WindowSpy会一直位于最前端。)3.移动鼠标光标到目标窗口需要的地方,写下WindowSpy显示的坐标(或者在WindowsXp和更早的版本中,按下Shirt+Alt+Tab来激活WindowsSpy以便冻结坐标使之能复制粘贴)。4.用上面发现的坐标来使用Click命令,下面的例子点击鼠标左键:Click112,233移动鼠标而不点击则使用MouseMove。拖拽鼠标用MouseClickDrag命令。激活和操作窗口激活窗口(使它到最上层),使用WinActivate。探测一个窗口是否存在可以使用IfWinExist或WinWait。下面这个例子阐明了这些命令:上面的例子首先搜索先现存的标题以Untitled-Notepad开头的窗口(区分大小写)。如果发现这样的窗口则它被激活。否则Notepad会被打开脚本会等待直到未命名的窗口出现同时激活它。上述例子也利用了最后发现的窗口来避免在每一个WinActivate的右边指定窗口名。其他的一些常用窗口命令:IfWinActive:检查指定的窗口是不是目前的活动窗口。WinWaitActive:等待指定的窗口被激活(通常用在发送活动窗口按键,如按下Control+F来查找)。WinClose:关闭指定的窗口。WinCMove:移动窗口和/或调整指定窗口大小。WinMinimize,WinMaxmize,WinRestore:分别是最小化,最大化和还原指定窗口。通过消息框,输入框等得到用户的输入下面的例子显示一个有两个按钮(YES和NO)的对话框:::btw::bythewayIfWinExistUntitled–Notepad{WinActivate}else{RunNotepadWinWaitUntitled–NotepadWinActivate}使用InputBox命令提示用户输入字符串。用FileSelectFileh或FileSelectFolder让用户选择一个文件或文件夹。对于更高级的任务,使用Gui命令来定制数据输入表单和用户界面。提示:你可能从其他的例子注意到任何命令的第一个逗号可以省略(特别当第一个参数为空或由:=或=开头,或命令是独自在一个有延续部分的顶部)。例:使用变量和剪贴板变量是一个脚本储存文本或数字的存储区域。只包含数字(允许小数点)的变量会自动解释为数字,当一个数学操作或比较需要它的时候。除了函数中的是局部变量,其余都是全局变量。换言之,它们的值可以被脚本的任何部分读取或改变。另外,变量不需要声明;要让它们存在很简单,就是使用它们(每个变量的初始值都为空)。下面的例子是给变量分配一个字符串:接下来的例子是变量值和字符串或数字的比较:上面的Msgbox行注意到第二次出现的MyVar1在百分号里面。这表示在该位置显示MyVar1的内容。同样的技术能用来把一个变量的内容复制给另一个。例:上面这一行给变量MyVarConcatenated存储了字符串”123mystring”(没有引号)。变量值之间的比较参考这个例子:MsgBox,4,,Wouldyouliketocontinue?IfMsgBox,NoReturn;否则用户选择yes.MsgBoxYoupressedYES.MsgBoxThisisok.MsgBox,Thisisoktoo(ithasanexplicitcomma).MyVar1=123MyVar2=mystringIfMyVar2=mystring{MsgBoxMyVar2containsthestring“mystring”.}IfMyVar1=100{MsgBoxMyVar1contains%MyVar1%,whichisanumbergreaterthanorequalto100.}MyVarConcatenated=%MyVar1%%MyVar2%注意到第一行有括号,它表示if语句包含一个表达式。否则会被认为是没有表达式的if语句,因此他需要给ItemLimit加上百分号(这样的if语句局限于单一的比较运算,也就是说,它不能包含数学操作或者像“AND”和“OR”的连接词)。数学:执行一个数学操作要用冒号-等号操作符(:=)来分配表达式的结果给一个变量,例:NetPrice:=Price*(1-Discount/100)查看完整数学操作符列表的表达式。剪贴板:变量Clipboard是特别的,因为它包含了当前windows剪贴板中的文本。尽管如此,它也能像一个普通变量那样使用。例如下面这一行可显示现在剪贴板中的内容:要改变剪切板内容参考下面的例子,用新的文本取代当前内容:上面,‘r和‘n(重音符号后跟字母“r”或者“n”)用来表示两个特殊字符:回车和换行。这两个字符开始一个新的文本行就像用户按下回车键一样。给clipboard(或其他任意变量)附加文本的例子:查看剪贴板和变量部分的更多细节。重复一系列动作用loop执行不止一次的连续命令。下面的loop会显示消息框3次:你也能在Loop后指定一个变量,这对于迭代次数取决于某个部分的脚本的情况很有用:If(ItemCountItemLimit){MsgBoxThevalueinItemCount,whichis%ItemCount%,isgreaterthan%ItemLimit%}MsgBox%clipboard%clipboard=Alineoftext.`r`nAsecondlineoftext.`r`nClipboard=%clipboard%Andhereisthetexttoappend.Loop3{MsgBoxthiswindowwillbedisplayedthreetimes.}上面,loo