功能
通过发送键盘或鼠标的键击动作命令来实现几乎所有操作的自动化。您可以自己编写 宏(AutoHotkey Script)或者使用宏录制器(AutoScriptWriter)来生成;
为键盘,游戏操纵杆和鼠标创建 热键。事实上任何的按键、按钮或组合键都可以被设置为热键;
可以对Windows各类型窗口进行匹配以及相关属性调整(例如:透明、隐藏、置顶、改变大小等);
当键入您自定义的缩写时可以 扩展缩写。例如,键入“btw”就可以自动扩展为“by the way”;
创建自定义的数据输入表格、用户界面、菜单等标准控件以及ActiveX 组件(例如IE浏览器控件)等。详情请看 图形界面 部分;
运行现有的AutoIt v2脚本并用 新功能 来增强它们;
将脚本文件编译 成EXE可执行文件,使得程序在没有安装AutoHotkey的机器上得以运行;
借助 相关工具 以实现更强大的功能;
更多关于热键的说明
AutoHotkey 可令键盘、游戏操纵杆和鼠标的所有潜能都发挥出来。例如,除了典型的Control、Alt和Shift键之外,你还可以定义Win键(徽标键)和Capslock键作为调节键。而实际上你还可以设置任意的键盘按键或鼠标按键作为调节键。详细内容请看 高级热键 部分。
其他功能
基本用法:
关闭或屏蔽Windows自有的快捷键,例如Win+E和Win+R;
取替Alt-Tab(通过按键、鼠标滚轮或按钮)从而减轻RSI(肢体重复性劳损);
本机代码互操作:
可以调用COM和DLL对象进行功能扩展;
可以创建机器码地址,当它被调用时会重定向到脚本中的函数;
可以复制字符串到内存地址或来自内存地址,并可以对其在指定代码页间进行转换;
文件、目录和磁盘管理:
读取、写入、复制、删除、获取设置属性以及解释文本文件比起其他语言更容易;
提供面向对象的文件I/O操作;
支持驱动器弹出以及获取驱动器列表、容量、剩余空间、文件系统、卷标、序列号、类型、状态等;
可对IN文件(配置信息文件)进行读写操作。
流程控制:
多种条件判断(字符项目、窗口、文件、进程、错误返回值等),条件下采用{}区块以及制表符进行分层级;
可以配合变量进行多级循环复杂操作;
可以与一般编程一样创建自定义函数并调用;
图形界面:
使用您喜欢的图标、工具提示(ToolTip)、菜单项目和子菜单来自定义托盘图标菜单;
显示对话框、工具提示(Tooltips)、气球提示以及弹出菜单,与用户交互;
可以置顶自定义图片来做程序启动界面;
鼠标和键盘:
可以禁用或启用用户通过键盘和鼠标对电脑进行操作而脚本不受影响。
用游戏操纵杆或键盘代替鼠标;
可以对窗口中的指定控件进行点击、改变文字等操作而不会出现鼠标点击事件;
数学相关:
可以进行一些科学运算(如三角函数、平方根、幂运算、e^N等);
屏幕管理:
通过检测图像和象素色彩来自动执行游戏中的动作;
进程管理:
执行脚本动作来响应系统关闭或注销;
使用RunAs方式指定运行用户身份;
可以对进程进行是否存在、列表、优先级、等待运行、等待结束操作;
注册表:
可以循环读取注册表并操作;
可对注册表进行读写、删除操作。
声音命令:
调节音量、设置静音,以及其他关于声卡的设置;
可以播放wav音频;
字符串管理:
可以定义字符串变量对字符串变量进行截取、替换、正则表达式匹配、大小写改变等处理;
可以生成随机数,用户可以根据随机数生成自定义随机字符;
获取并改变剪贴板的内容,包括从资源管理器中复制的文件的名称;
针对一组与通配符匹配的文件进行操作;
窗口管理:
可以检测窗口是否处于各种状态(激活、最大化、存在、隐藏等);
可以获取窗口的标题、ahk_class、文字等相关信息方便鼠标等操作;
可以对窗口进行最大化、激活、隐藏、关闭、强制关闭、等待等相关操作;
其他:
可以获取系统环境(如幕分辨率、多显示器信息、系统对象的尺寸和其他系统属性)相关信息并执行预定操作;
监控您的系统。例如,当您不希望见到的窗口出现时自动关闭它们;
可以设置定时器并启用、停用该项目;
检测系统空闲时间。例如,在系统空闲的时候执行高CPU负荷的任务;
你只要有想像力,它可以完成更多工作。
兼容性
在 Windows 95/98/Me 下,一些 高级功能例如鼠标热键和 热字串 -- 在Win9x 平台将失效。
在Window8/8.1环境下,BlockInput会失效。
在Windows RT操作系统上,需要越狱并下载指定编译版本Autohotkey,手动注册相关注册表项后
即可使用,不保证所用命令有效。
注意事项
1、在字符串赋值时,使用a=b这种方式时,“"”(英文双引号)、“,”(英文逗号)需要转义,转义符为“·”(Tab上面,1左边的字符),等同于其他语言的“\”。其他要转义的字符:回车“`r”,换行“`n”,制表符“`t”,空格“%A_Space%”,非注释分号“`;”,非引用百分号“`%”。
2、AHKer在接触AHK可能接触过其他语言,会有书写方面的问题。建议按照标准书写风格书写并严格使用制表符以及区块进行分层。语句各属性项目严格使用英文逗号分隔而不是空格,这会大大减少错误情况。
3、使用AutoScriptWriter录制的脚本可能会用语句冗余以及操作时间不当等操作,可以作参考并适当添加win相关命令以及PixelGetColor、ImageSearch等命令在恰当的时机操作。
4、窗口以及像素相关操作(如鼠标点击)默认为相对当前活动窗口,一些操作可能会错误。需要默认为全屏幕,请在脚本头添加:
CoordMode,Pixel,Screen
CoordMode,Mouse,screen
5、脚本运行时,默认会有任务栏图标及相关右键菜单,如不需右键菜单,请在脚本头添加Menu, Tray, NoStandard;如不需要显示任务栏图标,请在脚本头添加#NoTrayIcon。
翻译进度
原英文帮助CHM文件被解压后,除去19个脚本页面,共计254个HTML网页文件。
待翻统计:
命令:220个共1.22M,剩79个共717K
杂项:18个共172K,剩14个共156K
根目录下:16个共366K,剩7个共221K
html 文件总计:254个页面共1.75M
未翻:100个页面共1.07M,约61.14%
已翻:154个页面共0.68M,约38.86%
主分支的版本帮助已完全翻译完毕,翻译详情及下载请至AutoHotkey中文论坛
*AutoHotKey已推出中文版帮助,AHK版本v1.1.13.00。该中文帮助由 amnesiac 更新。
计划
(1)将官方论坛中Tuncay大大收集的Ahk Standard Library Collection(当前版本:201009181732)集成到帮助文件,已放出第一个测试版,欢迎下载及提供意见和建议!
(2)由于1.0.48.05版本主分支已经停止更新近一年,而AutoHotkey_L分支持续更新,增加了许多重要的特性,因此接下来计划翻译其帮助文件。
新特性
流程控制-BreakLoopLabel退出一个循环或任意数目的嵌套循环。ContinueLoopLabel继续循环,即使在任意数目的嵌套循环中。Forx,yinz从头到为尾循环对象的内容。Loop Until循环直到条件为真。可用于任意类型的循环。Try...Catch提供结构化的异常处理机制。Throw抛出异常。命令-FileEncoding为FileRead、FileReadLine、Loop Read、FileAppend和FileOpen设置默认编码。另请参阅:文本编码Gui请参阅后面的GUI 增强。IniRead/Write/Delete读取,写入或删除整段,或获取所有段名称组成的列表。Menu, Icon设置或移除菜单项图标。Run改进了参数的解析方式。SendInput {U+nnnn}发送 Unicode 字符。在 Unicode 版本中可以直接使用 Unicode 字符。SendLevel控制热键和热字串是否忽略模拟的键盘和鼠标事件。SetFormat, IntegerFast, h|H设置小写或大写的十六进制格式。SetRegView, RegView允许 32 位脚本中的注册表命令访问 64 位注册表视图,反之亦然。Transform, HTML执行代码页或 HTML 转换。WinGet, ..., ProcessPath获取拥有指定窗口的进程的完整路径和名称。指令-#Ifexpression类似于#IfWinActive,但可以是任意类型的表达式。#IfTimeout设置计算单个 #If 表达式可以使用的最大时间。#MenuMaskKey改变用来屏蔽 Win 或 Alt keyup 事件的按键。#Include <Lib>包含函数库文件夹中的脚本文件。#InputLevel控制热键和热字串是否忽略模拟的键盘和鼠标事件。#Warn启用或禁用为选择的情况提示开发者错误的警告。函数-ComObj...--ComObjActiveComObjEnwrap/UnwrapComObjParameterComObjType获取注册的 COM 对象。包装/解开 COM 对象。把值和类型包装成参数传递。获取 COM 对象的类型信息。ComObjArray创建用于 COM 的 SAFEARRAY。ComObjConnect连接 COM 对象的事件源到带有给定前缀的函数。ComObjCreate创建 COM 对象。ComObjError启用或禁用 COM 错误通告。ComObjFlags获取或改变控制 COM 包装器对象行为的标志。ComObjGet返回由 COM 组件提供的对象引用。ComObjQuery查询 COM 对象的接口或服务。ComObjType从 COM 对象获取类型信息。ComObjValue获取存储在 COM 包装器对象中的值或指针。Exception创建用于Throw的异常对象 (同时提供对堆栈的受限访问)。FileOpen提供面向对象的文件 I/O。Func获取函数的引用。GetKeyName/VK/SC获取按键的名称、文本、虚拟按键码或扫描码。InStr搜索字符串的出现位置,从左边或右边开始。IsByRef判断变量是否是 ByRef 参数。IsObject判断某个值是否为对象。StrPut / StrGet复制字符串到内存地址或来自内存地址,并可选地对其在不同代码页间进行转换。Trim移除字符串的开始和/或末尾的某些字符。RegEx (?CNum:Func)在正则表达式进行模式匹配期间调用函数。函数库新的 "本地库" 和#Include <LibName>。可变参数函数函数可以通过数组接受可变数目的参数。静态初始化静态变量现在可以使用任意表达式进行初始化。对象-概述对象的常规行为和用法。对象可以使用其他功能扩展的关联数组。枚举数可以枚举容器中的项目。文件提供访问文件的接口。FileOpen返回文件类型的对象。Func表示可以被脚本调用的自定义或内置的函数。ComObject请参阅上面的 ComObj 函数。变量-A_Is64bitOS当操作系统为 64 位则值为 1(真),为 32 位则为 0(假)。A_IsUnicode在 Unicode 版本中,此变量值为 1 (true)。 在 ANSI 版本中此变量未定义, 所以等同为false。A_FileEncoding包含用于多种命令的默认编码,请参阅FileEncoding。A_OSVersion支持 Windows 7 和 Windows 8,请参阅A_OSVersion。A_PriorKey在最近按键按下或释放前最后按下的按键名称 ...(更多细节)A_PtrSize包含指针的大小,单位为字节。此大小为 4 (32 位) 或 8 (64 位)。A_RegView由SetRegView设置的当前注册表视图。A_ScriptHwnd脚本隐藏主窗口的唯一 ID (HWND/句柄)。数据类型-Ptr在 32 位版本中等同于Int而在 64 位版本中为Int64。 由DllCall,NumPut和NumGet所支持。AStr,WStr仅DllCall支持,请参阅脚本兼容性。Unicode-兼容性在 DllCall 中如何处理 Unicode 等。脚本文件在脚本文件中使用 Unicode 编码。SendInput在 SendInput 中使用 Unicode。其他-ahk_exe窗口可以通过拥有此窗口的进程名称或路径 (EXE 文件) 进行标识。调试交互式调试功能 (单步执行等)。错误处理Try/catch/throw 和增加的 A_LastError 可用性。GUI 增强对 Gui 命令和相关部分的多方面增强。图标支持资源标识符和改进的对各种图标大小的支持。其他变更影响脚本兼容性的改变。版本历史AutoHotkey_L 的修订历史。
错误处理
许多命令支持使用 try/catch 代替 ErrorLevel 进行错误处理。例如:
try
{
FileCopy, file1.txt, C:\folder
FileDelete, C:\folder\old.txt
}
catch
MsgBox An error occured!
此外, 后面的这些命令设置 A_LastError 来辅助调试: FileAppend, FileRead, FileReadLine, FileDelete, FileCopy, FileMove, FileGetAttrib/Time/Size/Version, FileSetAttrib/Time, FileCreateDir, RegRead, RegWrite, RegDelete.
函数库
除了 %A_MyDocuments%\AutoHotkey\Lib 的用户库和在 AutoHotkey 目录的标准库外, 函数还可以从 %A_ScriptDir%\Lib 中的 "本地库" 自动加载。想了解更多信息, 请参阅 函数库。
#Include <LibName> 可以明确加载函数库中任意一个库文件。
GUI 增强
对 Gui 命令和相关部分进行了一些增强:
引用 GUI 时可以用 名称或 HWND 代替介于 1 和 99 之间的数字。
Gui, New 创建新的匿名 GUI。
可以创建任意数目的命名或匿名 GUI。
新 GUI 选项: +HwndOutputVar, +ParentGUI
GUI 的拥有者可以为任意窗口: +Owner%HWND%。
Gui, Font 可以控制文本的反锯齿效果。
支持像 Internet Explorer WebBrowser 这样的 ActiveX 控件。
GuiControlGet, OutputVar, Name 获取与 GUI 控件关联的变量名。
在 Gui menus 中使用像 Ctrl+O 这样的键盘快捷键时会自动得到支持。
字体品质 可以通过 Font 子命令控制。
静态变量
静态变量可以使用任意表达式进行初始化。例如:
Sleep 500
MsgBox % Time() "ms since the script started."
Time() {
static Tick := A_TickCount
return A_TickCount - Tick
}
文本编码
FileRead, FileReadLine, Loop Read 和 FileAppend 支持 Windows 所支持的大部分文本编码, 而不限于系统默认的 ANSI 代码页. 可以用 FileEncoding 设置默认编码, 此设置在 FileRead 和 FileAppend 中可以使用如下方法覆盖:
FileRead, OutputVar, *Pnnn Filename
FileAppend [, Text, Filename, Encoding]
此处 nnn 必须是数值的 代码页标识符, 而 Encoding 遵循与 FileEncoding 相同的格式。
另请参阅: 脚本兼容性
可变参数函数和函数调用
可变参数函数 可以通过数组接受可变数目的参数, 而 可变参数的函数调用 可以用来传递可变数目的参数给函数。
图标支持的改进
不常见的大小
可以从可执行文件中提取操作系统支持的任意大小的图标资源。当图标组中存在多种大小的图标资源时,则使用其中最合适的大小。在修订号 17 之前的版本中,系统先选择任意的图标资源,接着调整到系统的大图标尺寸,然后调整回请求的尺寸。
资源标识符
使用负数的图标编号可以标识可执行文件中的一组图标资源。例如,下面的语句设置托盘图标为 ahk 文件的默认图标。
Menu, Tray, Icon, %A_AhkPath%, -160