AutoHotkey_L 新特性

AutoHotKey

这个页面描述了新添加到 AutoHotkey_L 分支的功能,现在简称为"AutoHotkey 1.1".

警告: 近年来本文档已被忽视,可能会丢失一些最近的变化.

流程控制 
Break LoopLabel退出一个循环或任意数目的嵌套循环.
Continue LoopLabel继续循环, 即使在任意数目的嵌套循环中.
For x,y in z从头到为尾循环对象的内容.
Loop Until循环直到条件为真. 可用于任意类型的循环.
Try...Catch...Finally提供结构化的异常处理机制.
Throw抛出异常.
命令 
FileEncodingFileRead,FileReadLine,Loop Read,FileAppendFileOpen设置默认编码.
也请参见: 文本编码
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获取拥有指定窗口的进程的完整路径和名称.
指令 
#If expression类似于 #IfWinActive,但可以是任意类型的表达式.
#IfTimeout设置计算单个 #If 表达式可以使用的最大时间.
#MenuMaskKey改变用来屏蔽 Win 或 Alt keyup 事件的按键.
#Include <Lib>包含函数库文件夹中的脚本文件.
#InputLevel控制热键和热字串是否忽略模拟的键盘和鼠标事件.
#Warn启用或禁用为选择的情况提示开发者错误的警告.
函数 
ComObjActive --
ComObjActive
ComObjEnwrap/Unwrap
ComObjParameter
ComObjType

获取一个注册的 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_RegViewSetRegView 设置的当前注册表视图.
A_ScriptHwnd脚本隐藏主窗口的唯一 ID (HWND/句柄).
数据类型 
Ptr在 32 位版本中等同于 Int 而在 64 位版本中为 Int64. 由 DllCall, NumPutNumGet 所支持.
AStr, WStrDllCall 支持,请参阅脚本兼容性.
Unicode 
Compatibility在 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 命令和相关部分进行了一些增强:

静态变量

静态变量现在可以使用任意表达式进行初始化. 例如:

Sleep 500
MsgBox % Time() "ms since the script started."
Time() {
    static Tick := A_TickCount
    return A_TickCount - Tick
}

文本编码

FileRead, FileReadLine, Loop ReadFileAppend 支持 Windows 所支持的大部分文本编码, 而不限于系统默认的 ANSI 代码页. 可以用 FileEncoding 设置默认编码, 此设置在 FileRead 和 FileAppend 中可以使用如下方法覆盖:

FileRead, OutputVar, *Pnnn Filename
FileAppend [, Text, Filename, Encoding]

此处 nnn 必须是数值的 代码页标识符, 而 Encoding 遵循与 FileEncoding 相同的格式.

另请参阅: 脚本兼容性

可变参数函数和函数调用

可变参数函数 可以通过数组接受可变数目的参数, 而 可变参数的函数调用 可以用来传递可变数目的参数给函数.

图标支持的改进

不常见的大小

可以从可执行文件中提取操作系统支持的任意大小的图标资源. 当图标组中存在多种大小的图标资源时, 则使用其中最合适的大小. 在修订号 17 之前的版本中, 系统先选择任意的图标资源, 接着调整到系统的大图标尺寸, 然后调整回请求的尺寸.

资源标识符

使用负数的图标编号可以标识可执行文件中的一组图标资源. 例如, 下面的语句设置托盘图标为 ahk 文件的默认图标.

Menu, Tray, Icon, %A_AhkPath%, -160