# AutoHotkey_L 新特性

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

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

## 流程控制

特性 | 描述
--- | ---
Break LoopLabel | 退出一个循环或任意数目的嵌套循环.
Continue LoopLabel | 继续循环, 即使在任意数目的嵌套循环中.
For x,y in z | 从头到为尾循环对象的内容.
Loop Until | 循环直到条件为真. 可用于任意类型的循环.
Try...Catch...Finally | 提供结构化的异常处理机制.
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 | 获取拥有指定窗口的进程的完整路径和名称.

## 指令

特性 | 描述
--- | ---
#If expression | 类似于 #IfWinActive, 但可以是任意类型的表达式.
#IfTimeout | 设置计算单个 #If 表达式可以使用的最大时间.
#MenuMaskKey | 改变用来屏蔽 Win 或 Alt 键松开事件的按键.
#Include <Lib> | 包含函数库文件夹中的脚本文件.
#InputLevel | 控制热键和热字串是否忽略模拟的键盘和鼠标事件.
#Warn | 启用或禁用为选择的情况提示开发者错误的警告.

## 函数

特性 | 描述
--- | ---
ComObj... -- 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_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

dftg