# 变更和新功能

下面列出了 AutoHotkey 当前开发分支(也称为 AutoHotkey_L) 变更和新增功能介绍.

对于较旧的变更, 请参阅存档变更.

## 1.1.33.10 - 2021 年 8 月 29 日

修复 加载已经打开的 JPG/GIF 文件的问题.

修复 if-var-is 对 digits/xdigits 的错误识别.

新增 ControlGet Selected 的安全检查, 以防它被用于非 Edit 控件.

修复 变量在某些罕见情况下被设置为 NULL , 导致崩溃的问题. 唯一被证实的情况是, 当 AutoHotkey 作为 Windows 商店应用程序运行时, 一个超过 63 个字符的字符串从一个函数返回并被分配到一个变量.

修复 InputHook 回调在输入停止和重新启动后失败的问题.

## 1.1.33.09 - 2021 年 5 月 8 日

修复 当 AltTab 动作被用于 key-up/down 对时的加载崩溃问题.

修复 主脚本文件无法打开时的垃圾错误文本.

删除 在读取第一行之前出现的错误信息中的 "Error at line 0".

修复 当最小化的 GUI 被恢复时焦点重置的问题.

修复 在使用 Gui Show 将 GUI 最小化时焦点无法保存的问题.

## 1.1.33.08 - 2021 年 4 月 23 日

修复 非零 SendLevel 事件在 v1.1.33.07 版修正中未涵盖的情况下被错误地抑制:

- 当有一个匹配的上下文相关热键具有较高 #InputLevel 且没有启用全局变量时.
- 当没有匹配的 key-down 热键, 但有一个具有更高 #InputLevel 的 key-up 热键.

## 1.1.33.07 - 2021 年 4 月 21 日

修复 屏幕 DPI 变化后托盘图标冻结和变得模糊的问题.

修复 由 #InputLevel 错误的抑制按键而禁用热键的问题.

## 1.1.33.06 - 2021 年 3 月 14 日

修复 由 v1.1.33.05 版本引入的一个错误, 即某些热键被忽略. 这包括操纵杆热键和所有应用了 #MaxThreadsBuffer 或 B 选项的热键.

## 1.1.33.05 - 2021 年 3 月 10 日

修复 热键变体有不同 #InputLevels 的错误.

- 由于全局变体的 #InputLevel 较低, 即使发送级别够低, 热键变体也能执行.
- 热键变体不执行, 因为之前的变体由于 #InputLevel 而不符合条件.

修复 Ctrl/Shift/Alt(没有 L/R) 作为钩子热键的问题.

## 1.1.33.04 - 2021 年 3 月 2 日

删除了对 POPCNT 指令的依赖性, 老式 CPU 不支持该指令(例如 Core 2).

## 1.1.33.03 - 2021 年 3 月 1 日

修复 当空的 SafeArray 被枚举时会崩溃的问题.

修复 Button/Checkbox/Radio 使用 -Wrap 时高度不自动展开.

修复 WM_DESTROY 绕过释放全局/静态变量中的对象的问题.

修复 WinMenuSelectItem 二次尝试匹配能正确的处理 &. 具体而言, 有实际文本的项目, 如 "a && b" 显示为 "a & b" 现在将匹配 "a & b" 而不是 "a b".

修复 在 Case/Default 行的断点中断在前一个案例的结束处.

变更 SoundBeep, 如果持续时间为负值, 则忽略持续时间, 而不是将其转换为一个大的正值.

修复 带有 ! 的鼠标热键在重复按键时掩饰 Alt-up, 如果可能.

修复 几个热键重叠的问题.

- Key-up 热键触发不正确, 因为它们与有重叠但需求不同的热键配对, 如 `<^a up` 触发 RCtrl+A, 因为它与 `^a` 配对; 或 `*^c up` 触发 Shift+C, 因为它与 `*+c` 配对, 两者都可以触发 Ctrl+Shift+C.
- 热键的优先次序无法预测, 具有相同的修饰符但 L/R 不同的变体, 或不同的修饰符当其中一个都不是另一个的完美子集时. 优先级在一定程度上受到定义顺序的影响, 但当添加或删除热键时, 优先级的变化是不可预测的.

## 1.1.33.02 - 2020 年 7 月 17 日

修复 InputHook.EndKey 以优先 vk 于 sc000.

修复 `InputHook.KeyOpt("{sc000}", flags)`.

修复 #Warn Unreachable 标记 Case/Default 为不可达.

## 1.1.33.01 - 2020 年 7 月 13 日

修复 修饰键-松开热键, 如 `LShift up::` 不抑制按键-松开, 除非定义了相应的按键-按下热键.

修复 DLL/EXE 中加载的图标, 如果它在图标组中排在第一位, 则不使用最接近的匹配尺寸[被 v1.1.33.00 破坏].

修复 如果定义了 `a::` 但没有定义 `b & a::`, 则错误地将 `a up::` 优先于 `b & a up::`. .

修复 `b & a up::` 不抑制 `a`, 当 `a::` 已定义但被 #If 禁用, 且 `b & a::` 未定义时.

## 1.1.33.00 - 2020 年 6 月 30 日

增加 #ErrorStdOut Encoding 参数.

增加 /ErrorStdOut=Encoding 命令行开关.

增加 #Warn Unreachable(警告模式).

增加 #Requires AutoHotkey vVersion(指令).

增加 程序终止 SEH 异常的检测, 以显示错误对话框.

实现了由 fincs, TAC109, Joe DF 和 Ben Allred 开发的 Ahk2Exe 的许多改进.

修复 发送导致不必要的热键缓冲的问题.

修复 Input 一个可能引发未定义行为的 bug.[PR #159 from Helgef].

修复 WinKill 比 WinClose 做得更多.

修复 A_WinDir 总是返回系统 Windows 目录.

修复 FileGetShortcut/FileCreateShortcut 不递增/递减负的图标指数(资源 ID).

修复 InputBox Locale 选项不聚焦 Cancel 按钮的问题.

修复 当 GUI 没有控件时, 菜单栏键盘快捷键不起作用的问题.

修复 LoadPicture 在 DLL/EXE 中可用时使用 256x256 图形的问题.

修复 DBGp stderr 复制模式不抑制错误对话框.

修复 行为空时, ControlGet Line 设置 ErrorLevel=1 的问题.

## 1.1.32.00 - 2019 年 11 月 24 日

更改 带有 WinTitle 参数的命令和函数将 cloaked 窗口视为隐藏窗口.

增加 对快速模式下反向 PixelSearch 的支持. [PR #156 from changyuheng]

增加 InputHook OnKeyUp 回调.

修复 Windows 10(可能还有 Windows 8) 中 GroupDeactivate, 以排除桌面.

修复 Switch 始终将字符串视为真的问题.

修复 发送 Unicode 字符后, A_PriorKey 为空的问题.

修复 WinActivate 不假定 NULL 前景窗口 == taskbar 的问题.

修复 `Send {Del}` 在释放后不恢复 AltGr 的问题.

修复 vk13 和 sc045 作为重映射目标按键的问题.

删除 单行热键中对 Control 和 Sleep 的不必要的检查.

删除 过时的 Windows 9x/NT4 支持代码, 并执行其他维护.

## 1.1.31.01 - 2019 年 10 月 14 日

修复 `Switch %v%`, `Case %v%` 和 `Throw %v%`.

修复 `Case 2,,:` 以显示错误消息而不是崩溃.

修复 AltTab 热键 [被 v1.1.31.00 破坏].

修复 热字串 X 选项允许 `::` 后出现空白的问题.

修复 单行热键禁止多行语句, 如 IF.

## 1.1.31.00 - 2019 年 9 月 28 日

增加 Switch.

增加 InputHook.

增加 `Locale` 选项以使 InputBox 使用特定的本地按钮名称. [PR #143 from Ragnar-F]

优化 对长路径的支持.

常规热键优化:

- 优化 对重叠热键的支持, 如 `#If` 中的 `<^a` 和 `^a`. 如果 #If 禁用了热键的所有变体, 则可能触发更常规的热键. 换句话说, 用 #If 禁用热键现在应该更像是关闭它们或从脚本中删除它们.
- 优化 钩子检测到错误的修饰符按键状态.
- 修复 通配符热键选择的忽略由 Send 产生的修饰符改变.

AltGr 错误修复:

- 修复 `Send xy`(x 需要 AltGr) 后, 热键不触发的问题.
- 修复 `Send x`(x 需要 AltGr) 后, 发送不必要的 LCtrl.
- 修复 系统为 64 位时, Unicode 32 位构建对 AltGr 的检测.
- 修复 当 RCtrl 按下时, 发送 AltGr 组合热键.

Shift-numpad 错误修复:

- 修复 Send 和 Shift-numpad 之间的交互, 导致 Shift 粘住. 这修复了像 `Numpad1::Send +1` 这样的热键间歇性问题.
- 优化 由系统小键盘处理生成的伪 Shift 的检测.
- 修复 伪 RShift 被认为是物理上的, 与 LShift 不一致.

修复 Slider(滑块) `+TickInterval` 生效, 尽管如果 `Range` 没有设置.

修复 滑块 `+TickInterval0` 设置间隔为 0, 禁止刻度.

修复 在某些情况下, 菜单和 Gui 事件导致的 CPU-maxing 循环. 具体来说, 当模式消息循环正在运行且脚本不可中断时, 菜单和 Gui 事件会被反复重新发布. 这些现在被丢弃, 因为它们不能被处理或保存在队列中. 这与热键等是一致的.

修复 DllCall 严重错误时总是退出, 忽略 OnExit 结果.

修复 `ExitApp 2` 在全局/静态变量中绕过对象的释放.

变更 ComObjCreate 对非-GUID 字符串使用 CLSIDFromProgID. 这修复了 `ComObjCreate("Microsoft.Windows.ActCtx")` 和其他可能不在注册表中但可以工作 VBScript 和 JScript 的代码.

## 1.1.30.03 - 2019 年 4 月 4 日

修复 调试器 context_get 触发 #Warn UseUnset 的问题.

修复 直接修饰符热键如 Shift:: (由 v1.1.30.02 破坏).

## 1.1.30.02 - 2019 年 4 月 1 日

修复 菜单重命名以允许重复和无操作/仅大小写改变的重命名 .

修复 Hotstring() 的 X 选项. [来自 Helgef 的 PR #132]

修复 __init/__delete 造成的错误的行/堆栈跟踪.

修复 #if 表达式在 Sleep 和类似情形下的停滞问题.

修复 自定义组合热键在本身挂起后不正确触发的问题.

## 1.1.30.01 - 2018 年 11 月 11 日

更改 TV_Add/TV_Modify 以允许 "Bold1" 和 "Bold0".

修复 热键对带有非零 #InputLevel 时, 阻止 sent 事件.

修复 `Control Choose` 发送 WM_COMMAND, 即使控件的 ID 为 0.

修复 脚本使用键盘钩子但没有热键时的堆积错误.

修复 带有 'X' 选项的单行热字串中的转义序列.

修复 在 `;` 注释符号之前的 ```` 转义序列.

修复 `finally` 破坏待处理 `return` 的值.

修复 MsgBox 检测超时, 即使线程被中断.

修复 Ahk2Exe 在 #Include 中支持更多的内置变量.

## 1.1.30.00 - 2018 年 8 月 22 日

修复 SendInput/SendPlay 以恢复 DownR/remapped 修饰键.

增加 每个脚本的热键数量限制, 从 1000 提高到 32762.

变更 接受 On/Off/Toggle 的命令, 也接受 1/0/-1(在文档中已列出).

改进 调试器(DBGp) 的支持:

- 增加 对 -d(堆栈深度) 选项的支持.
- 增加 (DBGp-only) .<base> 伪属性以解决歧义.
- 修复 调试器以避免在中断状态期间不支持的重进.
- 修复 DBGp 命令解析器支持加双引号的参数.

## 1.1.29.01 - 2018 年 6 月 2 日

修复 WinMove 在某些情况下会导致程序崩溃的问题[由 v1.1.29.00 破坏].

修复 `Gui x:Default` 如果没有 Gui 被创建[由 v1.1.29.00 破坏].

## 1.1.29.00 - 2018 年 5 月 25 日

增加 `Object.Count()` 和 `ObjCount(Object)`.

增加 `ObjGetBase(Object)` 和 `ObjSetBase(Object, Base)`.

增加 `ObjRawGet(Object, Key)`.

增加 `OnError(Func [, AddRemove])`.

改进的异常处理:

- 如果未处理, 在堆栈展开 之前 显示错误消息/调用 OnError(使异常与运行时错误一致).
- 修复 __Delete 导致命令抛出, 即使 Try 没有使用.
- 修复 COM 客户端无法捕获内置脚本错误.

移除 每个按键可使用的自定义修饰符数量的限制.

变更 `Send {Text}` 以避免切换 CapsLock 或等待 Win+L.

修复 #Warn ClassOverwrite 不对 A_Args 进行警告.

改进 DBGp `源` 命令, 以便在文件代码页和 UTF-8 之间进行正确转换, 并减少代码大小.

其他代码大小优化和琐碎的维护.

## 1.1.28.02 - 2018 年 4 月 7 日

修复 `Control ChooseString` 和 `ControlGet FindString` 忽略前两个项目.

修复 `Control ChooseString` 去发送 WM_COMMAND, 尽管控件的 ID 为 0.

修复 WinActivate 还原活动窗口, 如原来 [v1.1.20.00] 所预期的哪样.

## 1.1.28.01 - 2018 年 3 月 31 日

修复 线程处理省略参数为 0.

修复 FileAppend 到 stderr (**).

修复 `break label` 可以跳转到一个不相关的循环.

恢复 热字串重置行为到 v1.1.28.00 之前的版本.

新增 `Hotstring("Reset")` 以手动重置热字串识别器.

## 1.1.28.00 - 2018 年 2 月 11 日

变更:

- 变更 __Delete 在对象清理期间的调用, 以便能捕获和报告异常. 它之前有 "延迟" 的异常(错误) 效果, 直到下一个函数调用或 try-block/线程 的结束.
- 变更 热字符串识别器在焦点发生变化时重置, 而不再只是在活动窗口更改时重置.
- 变更 WinMenuSelectItem 以处理菜单 `0&` 作为窗口的系统菜单.

新特性:

- 增加 支持所有内置变量传递路径到 #Include.
- 增加 A_TimeIdleKeyboard 和 A_TimeIdleMouse.
- 增加 A_ListLines.
- 增加 A_ComSpec (ComSpec 的别名).
- 增加 A_LoopFilePath (A_LoopFileFullPath 的别名, A_LoopFileFullPath 用词不当).
- 增加 热字符串的 X 选项可以执行相同行中的操作, 而不是自动替换.
- 增加 Hotstring() 函数.
- 增加 函数热字串.
- 增加 StrSplit 的 MaxParts 参数.
- 改进 #MenuMaskKey 以允许指定 VK 和 SC 或 vk00sc000.

Bug 修复:

- 修复 #MenuMaskKey 将一些有效的按键(如 Del) 视为无效的.
- 优化 Unicode 版本对 AltGr 的检测. 这修复了在启动时发生的延迟(从 v1.1.27.00 开始), 或者每个目标键盘布局第一次调用 Send(在 v1.1.27.00 之前).
- 修复 `x up::y` 重映射错误误导附近的行.
- 修复 `Menu Tray, Icon, HICON:%hicon%`, 现在使用 hicon 而不用调整它的大小.

## 1.1.27.07 - 2018 年 1 月 21 日

修复 Gui 带有 +Parent 时, 其默认尺寸不受父窗口限制 [被 v1.1.27.05 破坏].

修复 如果在控件失效后, 立即显示/隐藏单独的 Tab(选项卡) 控件, 控件不会重绘的问题(比如, 同时显示/隐藏多个控件).

## 1.1.27.06 - 2018 年 1 月 16 日

修复 热字串/Input 导致的无用键(dead keys) 卡死(被 v1.1.27.05 破坏).

## 1.1.27.05 - 2018 年 1 月 16 日

修复 可见的 Input 结束键导致任何挂起的无用键两次松开.

修复 热字串/Input 影响 Tab/Esc 在无用键序列中的作用.

修复 如果使用 DLL, A_IconFile 返回错误的路径.

修复 Gui 带有 +Parent 时, 相对于父窗口居中而不是屏幕.

修复 通用 Windows 平台(UWP) 应用程序中 Input/热字串对无用键序列的检测.

修复 `< & v` 和 `> & v` 被视为重复, 以及类似的情况. 这会影响自定义组合其中前缀键也是修饰符符号. 这也修复了仅包含修饰符符号和单个尾部空格, 例如 `+ ::` 的热键, 将其视为错误而不是忽略空格(热键不允许尾随空格).

## 1.1.27.04 - 2018 年 1 月 10 日

修复 #Warn ClassOverwrite 发出错误警告.

## 1.1.27.03 - 2018 年 1 月 6 日

改进 `Menu x, NoStandard` 和 `Menu x, DeleteAll` 的工作方式, 而不试图破坏底层的 Win32 菜单. 当 x 是一个菜单栏或子菜单时, 允许他们可以正常工作.

重写了 `vkXXscYYY` 的处理方式:

- 修复 GetKeyVK 和 GetKeyName 将 vkXXscYYY 视为 vk00scYYY 的问题.
- Send 现在对 {vk...} 和无效后缀更为严格, 与 [v1.1.27.00] 所做的类似更改一致(但仍支持 sc).
- 减少了代码大小.

修正 在 64 位版本的某些特殊情况下对 32 位范围以外的数字键(但在 64 位范围内) 的错误处理. 这只影响使用诸如以数字为名称的类(不推荐使用出于多种原因) 和通过以数字作为键/成员名称的 IDispatch 的数组访问.

## 1.1.27.02 - 2018 年 1 月 1 日

修复 以原始的尺寸加载 bmp 文件作为图标的问题.

修复 复合赋值如 `Test.Prop[1] += 1` (被 v1.1.27.01 破坏).

## 1.1.27.01 - 2017 年 12 月 31 日

修复 在缺少 #NoEnv 的脚本中由 `++X` 或 `--X` 引起的程序崩溃(被 v1.1.27.00 破坏).

修复 #Warn ClassOverwrite 对 `++MyClass.X` 错误的警告.

修复 重新映射以允许自定义组合 `a & b::c`.

修复 Send/hotstrings/Input 以适应焦点控件的键盘布局, 而不仅仅是活动窗口的. 尤其是, 这会影响 UWP 应用程序如 Microsoft Edge.

修复 当接收到一个单独的 Ctrl/Shift 键释放消息时, 钩子热键不能抑制开始菜单的问题. 当从一个带 AltGr 的键盘布局切换到一个不带 AltGr 的键盘布局时(如 从 UK 切换到 US), 如果当时没有按住 Ctrl, 系统可能会生成 Ctrl 键释放(up) 的消息. 这将修复热键如 `$#z::WinActivate x` 当焦点的变化导致满足了这些条件.

修复 Input 在两个 Shift 都按下时不收集字符.

修复 Input 使用 "sc" 和 "vk" 在 ErrorLevel 中作为结束键而不是 "Sc" 和 "Vk"(被 v1.1.20 破坏).

修复 `GetKeyName/VK/SC("vkXXscYYY")` 当 YYY 以 A-F 开始(被 v1.1.26 破坏).

## 1.1.27.00 - 2017 年 12 月 25 日

变更:

替换 AU3_Spy.exe 为 WindowSpy.ahk.

- 如果找不到 WindowSpy.ahk, AU3_Spy.exe 仍然启动.
- 现在默认获取焦点控件的信息, 并且有一个窗口和控件是否跟随鼠标的复选框.
- 不再接管全局热键(Win+A). 作为替代, 按住 Ctrl 或 Shift 暂停更新(在聚焦 Window Spy 后释放它们).
- 现在可以在 Windows 10 中按 Alt-Tab 到 Window Spy, 而不改变 GUI 的内容.

变更 当键盘布局中不存在该字符时, a-z 表示为 vk41-vk5A, Raw 模式或发送单个未修改字符时除外. 这允许热键和发送键盘快捷键在某些非英语键盘布局中更加直观的工作.

变更 在 ANSI 版本中, 对于特殊字符, Send 命令使用 SendInput() 代替 Alt+nnnnn.

变更 在按下钩子热键时, 菜单(Alt/Win) 掩饰键的规则:

- 显式发送 Alt/Win 可能被屏蔽. 这修复了键盘映射, 如 `AppsKey::RWin`, 但为了激活开始菜单的热键可能需要新的变通办法.
- 如果 Alt/Win 逻辑是按下但没有物理按下, 只有热键需要 Alt/Win (如 `#a::`, 而不是 `*a::`) 时, 才引发掩饰键. 这是允许重映射或通配符热键发送 key-up 不被掩饰.
- 不抑制热键原生功能的热键如 `~#a::` 不再引发掩饰键, 因为原生的 keydown/keyup 足以阻止菜单. 但是, 鼠标热键像 `~*MButton::` 结合 Win 键, 不再阻止开始菜单. 它可以通过发送 `Send {Blind}{vk07}` 或类似的方式手动阻止.
- 现在, 键盘钩子跟踪与 Alt/Win 相关的事件, 因此如果 Alt/Win 已被某些其他事件(物理或发送) 掩饰, 则不需要发送掩饰键.

热键 `~LWin::` 和 `~RWin::` 不再屏蔽开始菜单(译者注: 旧版的屏蔽效果也不是很好). 有关详细信息和解决方法, 请参阅 #MenuMaskKey.

增加 vk 或 sc 键名增加适当的验证, 所以名称, 如 "sc01notvalid" 不再被识别为按键.

脚本中含有形如 `VKnnSCnnn::` 热键的将需要通过删除 `SCnnn` 来加以修正, 在之前的版本中是被忽略的.

帮助文件: 使用由 Ragnar-F 开发的新 HTML5 边栏替换标准 HTML 帮助查看器边栏.

新特性:

- 增加 Min/Max 内置函数. [PR #84 from Ragnar-F]
- 增加 A_Args 作为数字变量的替代.
- 增加 函数的强制局部变量模式.
- 增加 #Warn ClassOverwrite.
- 增加 Send 命令的 {Text} 模式和热字串的 T 选项. 这些都类似于原始模式, 但更可靠.
- 增加 {key DownR} 并更改重映射以使用它, 以解决 `AppsKey::RWin` 和类似的问题.

Bug 修复:

- 修复 当索引无效时, 图标加载不默认为 id 0.
- 修复 VK↔SC 映射 PrintScreen. SC→VK 已经能在 Vista 和更高版本上正确使用了.
- 修复 在某些情况下, 热键控制返回 scXXX 而不是名称的问题.
- 修复 如果 ByRef 参数引用包含对象的变量, ListVars 会崩溃. [PR #86 from HotKeyIt]
- 修复 一些(概率极小的) 内存泄漏.
- 修复 如果只使用标准项目, 菜单句柄不会被释放.
- 修复 粗体字体不会应用于默认菜单项, 如果它具有子菜单和 Win32 菜单句柄.
- 修复 Send 使用 Unicode 字符时, 使用正确的修饰符状态.
- 修复 `ControlSend {u n}`, 其中 u 是 Unicode, 发送 n 次, 而不仅仅是 1 次.
- 修复 系统版本之间 AltGr 的行为不一致的问题. 具体来说, `RAlt::` 再次导致系统在 Windows 10 中 "释放" LCtrl, 就像在 v1.1.26.01 之前一样(但不像那些旧版本, 它阻止了 RAlt-up 到达活动窗口). 这种更改不会影响没有 AltGr 的键盘布局.
- 修复 `Menu Tray, Icon`, SB_SetIcon 和 LoadPicture 使用非零 Icon 选项时, 允许位图(但如果需要转换时, 将会进行转换).
- 修复 菜单项不会消失, 当光标被设置为菜单项的图标时.
- 改进 启动 Window Spy 和 帮助文件:
  - 如果安装了 AutoHotkey, 但当前可执行文件在不同的目录中(例如 可移动磁盘), 则安装的文件不再是首选, 因为它可能是错误的版本. 它仍然可以用作后备.
  - 无法启动文件时, 在对话框中显示错误消息, 不使用本身的标题栏.
- 修复 以 `sc` 或 `vk` 开头的表达式的单行热键.
- 修复 `>`/`<` 热键修饰符错误地允许按下两个键. 例如, `<^A` 可能被 LCtrl+RCtrl+A 错误触发, 从而阻止了 `<>^A` 热键的工作.
- 修复 自动替换热字串在某些情况下插入原义文本 "{raw}"((具体来说, 当替换包含 `{Raw}` 并且未使用 O, R 和 * 选项时).
- 修复 一些不使用钩子的热键被通配符热键遮盖失效的问题, 这取决于热键定义的顺序.
- 修复 如果 key-down 热键只是 "k-hook" 时, 在相应的 key-up 热键被禁用后, 恢复为 "reg". (在 v1.1.07.03 之前, 这已经发生了, 但是如果 key-down 热键在 key-up 热键之后定义的话, 则 key-down 热键从一开始就不会被设置为 "k-hook".)
- 修复 钩子热键忽略由 `Send !^+#{key}` 或发送 Unicode 字符引起的修饰符变化. 在 SendLevel 0 时, 这会恢复 Send 到 v1.1.06 之前的状态, 但在 SendLevel >= 1 时, 保持 v1.1.06 + 的行为, 允许 Send 触发正确的热键.
- 改进 如果 Send 是从 "reg" 热键中如 `^m::Send x` 第一次被调用时, 恢复修饰符状态的几率进行改进. 这样就不太可能在第一次按住时产生不同的(意外的) 结果, 如 xmmm 而不是 xxxx.

## 1.1.26.01 - 2017 年 7 月 16 日

修复 当 A_LoopRegSubKey 为空时, 例如枚举时键直接在根键下, RegDelete(不带参数) 会失败的问题.

修复 `RAlt/LAlt::` 在使用 alt-tabs 切换窗口然后重新激活时有时不能阻止菜单激活.

修复 SC → VK 转化为多媒体键, PrintScreen, CtrlBreak, Pause, LWin 和 RWin, 但 Windows 2000 和 XP 上的多媒体键, PrintScreen 和 CtrlBreak 仍然转化不正确.

修复 VK → SC 转化为多媒体键, CtrlBreak 和 Pause.

修复 'Wait 命令例如 RunWait 仅在必要时为 ListLines 记录额外的行, 以显示它仍在等待, 也就是说, 在中断处恢复后才记录其他行.

## 1.1.26.00 - 2017 年 6 月 10 日

变更 ListVars 的格式用于显示包含对象的变量. 对象的类名现在可以显示了.

增加 "class" 和 "clsid" 方法到 ComObjType().

改进 调试器中类名的显示, 并在此过程中显著缩减代码的大小.

改进 FileSetAttrib, FileSetTime 和 FileDelete 以缩减代码大小. 对于这些命令的使用应该没有任何变动.

对代码大小进行其他较小的优化.

修复 GetKeySC() 对于 Esc, Escape, ScrollLock 和 PrintScreen 键的使用.

修复 热字串是否包含非间距标记, 例如阿拉伯语变音符号.

## 1.1.25.02 - 2017 年 5 月 13 日

修复 如果错误产生时 GUI 选项字符串被永久的缩短.

修复 子变量的属性和类使用非 ASCII 字符.

修复 `new` 操作, 使用 __New 用于抛出或退出.

## 1.1.25.01 - 2017 年 3 月 5 日

修复 Send 在特殊字符的前面, 脚本作用于修饰键状态的改变, 例如 Shift 的释放在 `Send Mört`.

## 1.1.25.00 - 2017 年 3 月 4 日

增加 Hotkey, If, % FunctionObject(函数对象).

修复 帮助菜单中打开的网址.

## 1.1.24.05 - 2017 年 2 月 3 日

修复 WinSet AlwaysOnTop/Trans/TransColor 在扩展样式值为 0 时能正常使用.

## 1.1.24.04 - 2016 年 12 月 17 日

修复 `File.ReadNum()` 重复旧的数据, 如果先前 `File.Read()` 在缓冲区的末端停止读取.

优化 缓存的利用在 `File.Read()` 到达缓冲数据的结尾时.

修复 `GuiControl +Password` 在 XP 及以后系统中使用默认的子弹字符.

修复 `GuiControl +/-Password` 立即重绘控件.

## 1.1.24.03 - 2016 年 11 月 19 日

修复 COM 异常消息不以 ``r` 结束.

修复 `{U+x}` 支持补充的字符(x > 0xFFFF).

修复 没有 get{} 的类属性返回空值代替对象的内置属性当基类没有定义属性值. 无基类中定义的属性已经正确地运行.

修复 当系统禁用视觉样式(例如, Windows Classic) 时, Tab3 控件中的控件的背景颜色.

修复 在事件(例如, OnExit 函数) 直接调用的函数中处理退出线程. 除了在 v2-alpha 分支中, 这个 bug 没有已知的效果.

修复 调试器立即检测断开的连接(例如, 当客户端终止时没有调用 stop 或 detach).

修复 调试器对 `property_get -m 0` 当做 "unlimited" 处理, 根据 DBGp 规范.

修复 调试器要求 base64 为 `property_set -t integer/float`, 根据 DBGp 规范.

## 1.1.24.02 - 2016 年 10 月 13 日

增加 Run with UI Access(以 UI Access 运行) 选项在安装界面中.

增加 Tab3 autosizing 文档.

修复 系列 Tab3 的 bug:

- 如果使用了 `AutoSize` 或 `w` 和 `h` 选项, 第一次调用 Gui Show 不会触发自动调整.
- 如果发生自动调整时 Tab3 控件为空, 它现在保留默认大小, 而不会变得不可用.
- 在创建另一个标签控件之前, 立即自动调整, 就像 Gui Tab 被调用一样.
- 如果选项卡控件具有负屏幕坐标, 则自动调整失败.
- 使用 GuiControl 隐藏 Tab3 控件现在也隐藏其对话框/背景.

修复 OnMessage 传递 lParam 作为无符号的 32 位.

修复 `Gui Name :` 冒号前面允许空格.

修复 由负值的 HWND 来识别 Gui 或 GuiControl.

修复 ComObject 抑制脚本释放对象后由事件断开引起的任何错误.

修复 如果界面有一个多行菜单栏, Gui Show(界面的显示) 导致窗口缩小.

修复 `LV_InsertCol(n, width)` 在某些操作系统中, ListView 滚动条不会更新的问题.

优化 FileRecycleEmpty 的代码大小.

## 1.1.24.01 - 2016 年 8 月 2 日

变更 `Hotkey, If, Expression` 如果未使用的第三个参数不为空时, 会引发错误.

修复 `&&`, `||` 和三元运算释放任何用作条件的对象, 例如 `if (a.subObject && b)`.

修复 Gui/GuiControl 在 Tab3 控件中选中 radio 按钮失败的问题.

修复 FileCreateShortcut 允许在 Windows 10 中 LinkFile 参数为相对路径.

修复 Tab3 控件主题不覆盖其控件的自定义文本颜色.

修复 在某些具体情况下调试器继续命令处理不正确.

## 1.1.24.00 - 2016 年 5 月 22 日

破坏性变更:

传递计时器的 标签 参数是空变量或返回空值的表达式被看做一个错误. 这个参数必须为非空的值或完全忽略.

运行一次的计时器如果与脚本创建的对象相关联, 则会在运行后自动删除. 这允许在脚本不再引用它的情况下释放对象, 但这也表示计时器的 Period 和 Priority 不再保留.

SetTimer, Hotkey, GuiControl 和 Menu 现在检查由参考给出的函数的最小参数计数(不像以前的版本). 如果该功能需要太多参数, 会引发错误或设置 ErrorLevel(视情况而定).

向后兼容的改变:

如果计时器的标签 参数被省略且 A_ThisLabel 为空, 则使用当前的计时器(如果有的话).

新特性:

增加 Tab3 控件类型, 解决若干 Tab 控件的问题.

Bug 修复:

修复 GuiControl 在添加/删除 选项卡时更新控件. 特别是:

- 使用 `||` 来选择新选项卡现在工作正常.
- 删除所有选项卡现在隐藏前选项卡的控件.

修复 `+Disabled`/`+Hidden` 在选项卡中的控件上失去效果.

修复 禁用选项卡控件以忽略 Ctrl + Tab.

修复 `Gui Tab` 没有参数, 可以开始新的 radio 按钮组(如果适用). `Gui Tab` 带有参数, 已经有了这个效果.

## 1.1.23.07 - 2016 年 5 月 20 日

修复 `Menu x, Insert, y, z, % object` 使用对象.

修复 `Menu x, Add, :item text, % object` 子菜单使用对象.

## 1.1.23.06 - 2016 年 5 月 15 日

修复 `break label` 直接内嵌到它的目标循环中导致程序崩溃的问题.

## 1.1.23.05 - 2016 年 3 月 27 日

修复 InputBox, MsgBox, FileSelectFile 和 FileSelectFolder 命令在当 Alt 键被按下时会发送一个非预期的 Alt-up 出来. 这是由于在 v1.1.22.01 版本处理 Ctrl/Shift 时的错误导致的.

改进 Ctrl/Shift 的工作方式, 以避免在同时按下 Ctrl, Shift 或 Alt 键时不必要的掩盖了 Win 键.

## 1.1.23.04 - 2016 年 3 月 26 日

修复 LV_Modify 以支持被忽略的参数, 如 `LV_Modify(r,, col1)`.

## 1.1.23.03 - 2016 年 3 月 12 日

修复 __Delete 元函数如果在异常传递过程中被调用时, 错误的不抛出或重复抛出异常.

修复 当必须参数为空时函数调用的载入时侦测问题, 如 `fn(x,,y)`.

## 1.1.23.02 - 2016 年 3 月 12 日

修复 RegDelete 删除整个键值而非默认值.

代码维护;一些代码体积的精简, 提升.

## 1.1.23.01 - 2016 年 1 月 24 日

修复 理论上可能存在从畸形或太长的路径中无法载入脚本的问题.

Ahk2Exe: 修复已编译脚本中的 Unicode 编码问题(v1.1.23.00 版本引入).

## 1.1.23.00 - 2016 年 1 月 16 日

增加 Menu Insert 子命令.

增加 MenuGetHandle().

增加 MenuGetName().

增加 Menu 命令菜单项目: Radio, Right, Break 和 BarBreak.

改进 Menu 命令以支持通过项目位置序号识别菜单项目: `1&`

增加 LoadPicture().

增加 hicon/hbitmap: 传递句柄给那些通常需要从文件载入图像的命令.

增加 内置变量: A_CoordModeToolTip/Pixel/Mouse/Caret/Menu, A_DefaultGui, A_DefaultListView, A_DefaultTreeView, A_KeyDelayPlay, A_KeyDuration/Play, A_MouseDelayPlay, A_SendLevel, A_SendMode 和 A_StoreCapsLockMode.

增加 Hotkey 命令的 `Ix` 选项, 动态设置热键的输入等级为 x .

改进 Picture 控件以支持背景透明的图标文件.

改进 Picture 控件以减少载入大图像时的闪烁现象.

对菜单部分的代码和内置变量查找做了一点优化.

修复 菜单项目中项目和分隔线的转换.

修复 A_ThisMenuItemPos 以支持重复的项目名称.

修复 子菜单无法在菜单被删除后有时重新创建.

修复 AutoHotkeyXXX.exe 直接运行时启动 AutoHotkey.chm, 而非 AutoHotkeyXXX.chm.

## 1.1.22.09 - 2015 年 11 月 11 日

修复 SetTimer Delete 的一些问题.

- KeyHistory 的 timer 计数当中错误的包含了已经删除的 timer.
- 由计时器初始化的线程中, 如果已被删除但并未关闭的计时器调用了 KeyHistory 将会引起脚本崩溃.
- 删除最近创建的计时器时会导致早前创建的计时器无法运行除非所有计时器被删除.

## 1.1.22.08 - 2015 年 11 月 11 日

修复 For 循环在 _NewEnum/Next 抛出异常时仍可以正确传递控制.

修复 Finally 命令在其执行体执行完成后才暂停延迟异常而不是仅当遇到首个内建函数调用时.

修复 对于来自 Finally 代码段的不可用跳转的载入时侦测(v1.1.20 引入此 BUG).

## 1.1.22.07 - 2015 年 9 月 27 日

修复 当 DPI 缩放为 150+%且 Gui 没有使用 `-DPIScale` 参数, Gui 控件中的 `w-1` 和 `h-1` 选项失效问题.

修复 `~key up` 热键没有自动 `Send {key down}`. 仅当热键在该键被按下后才被启用的时候会发生此问题.

## 1.1.22.06 - 2015 年 9 月 13 日

修复 输入和热字串捕获 Unicode 和 无标记字符编码 事件.

修复 Edit 控件中如果最后一行为空行也进行自动伸缩大小.

修复 可响应 ComObj 函数的 内存不足 问题.

修复 ComObjArray 直接忽略多余的参数而不会崩溃(仅适用于动态调用).

修复 GuiControl 以 "追加" 的形式修改 Tabs 控件(而不是原来的直接替换, 见 GuiControl 中的 Tab 说明).

修复 XP64 支持.

## 1.1.22.05 - 2015 年 9 月 10 日

修复 优化无数字 ID 的图标加载.

修复 当 Gui 销毁时, 对于 +g 选项的函数对象不会主动释放资源.

修复 Gui Show 显示主 Gui 时避免强制激活子 GUI.

修复 当 Caps/Num/ScrollLock 按键按下时状态设置失败.

修复 Gui 颜色影响文本的颜色(一般为黑色).

修改 提高当 Gui Show 时 GuiSize 立即执行的成功几率.

对于开发人员:

- 调整 工程配置以适应更多 VC++ 版本.
- 修复 多个在 VC++ 2015 中出现的编译错误.
- 64-bit 版本使用 VC++ 2015 来编译. 32-bit 版本仍然使用 VC++ 2010 编译.

## 1.1.22.04 - 2015 年 8 月 19 日

修正 ObjRawSet() 不返回内容.

添加 Windows 10 supportedOS 标签到执行程序的 manifest(避免一些兼容性问题).

添加 检测函数声明中 ")" 之后的语法错误的检测.

## 1.1.22.03 - 2015 年 6 月 12 日

修正 A_EndChar 在 Unicode 结尾字符中返回截断值的情况.

小变更:

- 改变 A_Language 使用 GetSystemDefaultUILanguage() 获取.
- 重构托盘链接菜单 Window Spy 或帮助文件来提高代码复用.
- 优化 Gui/Menu/Hotkey/Hotstring/OnClipboard 消息处理(多处).

## 1.1.22.02 - 2015 年 5 月 27 日

修正 TreeView 对于未知消息不提交 `*` 事件.

修正 计时器删除本身时出现的崩溃或坏的表现.

修正 RWin-up 被屏蔽在某些罕见的情况下, 而 LWin-up 不会.

## 1.1.22.01 - 2015 年 5 月 24 日

修正 Text/Edit/Button 控件调整大小来弥补字符溢出.

修正 注册表命令允许在子键中使用 `:` 当与根键合并.

修正 热键优先顺序.

重构 else/try/catch/finally 来支持 `hotkey::try cmd`.

添加 一个脚本对话框的解决方案就像 Ctrl 或 Shift 在键盘钩子被锁后按下的情况.

## 1.1.22.00 - 2015 年 5 月 1 日

添加 SetErrorMode(SEM_FAILCRITICALERRORS) 在程序启动时抑制系统级错误消息, 例如 "驱动器中没有磁盘". 调用 Drive 或 DriveGet 不再影响进程的错误模式.

变更 MonthCal 控件默认拥有 tab-stop 在 Vista 或更高系统中.

改进 ComObjConnect 使用 IProvideClassInfo, 如果可用.

修正 了方法, 属性定义和括号在同一行结束出现的一些问题.

修正 Text/Link 控件自动调整大小在 +Border(WS_BORDER) 样式情况下.

修正 `Break N` 当 loop 直接跟在 If/Else/Try/Catch 后面的情况.

## 1.1.21.03 - 2015 年 4 月 12 日

修正 属性和方法之间的命名冲突检测.

## 1.1.21.02 - 2015 年 4 月 4 日

修正 `OnMessage(msg, fnobj, 0)` 不做任何事如果 fnobj 没有被注册.

## 1.1.21.01 - 2015 年 4 月 3 日

修正 StrReplace() 允许 ReplaceText 被省略.

修正 类变量名使用非 ASCII 命名.

## 1.1.21.00 - 2015 年 3 月 28 日

添加 Loop, Reg, RootKey[\Key, Mode].

添加 Loop, Files, FilePattern [, Mode].

变更 InputVar 参数允许 % 表达式(除了 if 命令).

修订 对象方法:

- 添加 Object.InsertAt(), Object.Push() 和 ObjRawSet().
- 添加 Object.Delete(), Object.RemoveAt() 和 Object.Pop().
- 添加 Object.Length().

添加 Ord() 和更新 Chr() 来支持补充字符(>0xFFFF).

添加 StrReplace().

移除 RegRead 中为了兼容 AutoIt v2 而使用的 5 参数模式, 这些已不再支持(额外的参数是未使用的).

变更 RegRead, RegWrite 和 RegDelete 根键和子键参数可以随意组合.

## 1.1.20.03 - 2015 年 3 月 21 日

修正 MouseGetPos (OutputVarControl), GuiContextMenu, GuiDropFiles (A_GuiControl) 忽略被禁用的控件的问题[被 v1.1.20.00 破坏].

## 1.1.20.02 - 2015 年 3 月 11 日

修正 OnMessage 的 add-first 模式.

修正 A_OSVersion 未知的 x64 版本操作系统.

修正 ExitApp 来取消暂停脚本在释放对象前以防 __delete 元功能已调用.

琐碎的优化和代码维护.

## 1.1.20.01 - 2015 年 3 月 10 日

由于在线程中断中的保存和恢复 ErrorLevel 上意想不到的后果, 恢复 v1.1.20.00 所做的更改.

- ErrorLevel 在新线程开始时不会重置或清除, 反而, 它保留了在中断线程的值, 就像 v1.1.19 及早期版本.
- 如果 ErrorLevel 包含一个对象并且线程被中断, 线程继续时对象替换为空字符串, 就像 v1.1.19 及早期版本.
- 当线程继续时, 如果 ErrorLevel 包含一个字符串的长度超过 127 个字符, 它会被截断, 就像 v1.1.19 及早期版本.

修正 计时器有时会导致 ErrorLevel 会被格式化成十六进制值.

修正 类方法保留类的计数引用.

## 1.1.20.00 - 2015 年 3 月 8 日

新特性:

增强 Hotkey, Menu, SetTimer, Gui 事件和 Gui 控件事件接受函数替换标签, 如果没有找到标签.

增强 Hotkey, Menu, SetTimer 和 Gui 控件事件接受 Func 对象. 添加一个删除子命令来让 settimer 释放对象.

增强 OnMessage() 允许任意数量的函数或函数对象来监控单个消息.

添加 OnExit() 和 OnClipboardChange() 接受函数名或对象.

添加 热键标签指向函数的功能.

添加 U/L/T 修饰语执行 Format() 的情况转换.

添加 Input 的 E 选项, 从而处理单个字符的字符代码结束键而不是通过键码.

添加 FileAppend 的 **(stderr) 支持.

添加 ObjBindMethod(obj, method, args*) 和 Func.Bind(args*).

变更:

改变 默认表现, 当主脚本未找到时:

- 如果没有指定脚本和未找到默认脚本文件, 则在显示帮助文件的欢迎页.
- 如果一个脚本被指定或帮助文件丢失(或被重命名), 只显示一个错误信息.

变更 WinActivate 来还原已经激活且最小化的窗口.

变更 WinActivate 来寻找一个可见窗口并激活当 DetectHiddenWindows 关闭且激活窗口是隐藏的时候, 而不是什么事都不做.

变更 A_CaretX/A_CaretY 的获取方法.

- 在更多的情况下真正的插入位置不能确定时返回空白, 而不是返回活动窗口的左上角.
- 不太可能产生副作用.
- 在 console 窗口中生效.

变更 A_OSVersion 使用 RtlGetVersion() 来获取 win10 及未来版本.

变更 A_OSVersion 返回 "major.minor.build" 格式如果系统没有名字.

变更 对象来支持 `x[,y]`, `x.y[,z]` 和 `x[](y)`.

- 用户自定义对象可以利用 this 来指定属性和元函数的参数的默认值. 在 __Call 中, 第一个参数被省略了, 如 `x. __Call(,y)`.
- COM 对象调用 DISPID_VALUE 如果成员名略. 例如, `x[]` 检索 x 的默认属性并且 `fn[]()` 可以用来调用 JScript 函数.

一些底层的修改来修正 bug, 减少代码大小或者提高性能, 包括:

- 变更 #if 和静态变量初始化的预解析.
- 变更 { 区块 } 的预解析.

错误修正:

修正 VK 到键名的转换来遵循 A-Z 的布局.

- 适用于 GetKeyName, Hotkey 控件, A_PriorKey, KeyHistory 和 Input 的 EndKey ErrorLevel(除必需的 Shift 键).
- 所有其他键包括非 ASCII 字符会被转换成 Autohotkey 的当前键盘布局.

修正 FileAppend 的 *(stdout) 遵循编码参数而不是 ANSI 文本.

修正 自适应大小 GUI 只有一个滚动条的情况.

修正 `Exception(m, n)` 当 n 太大时崩溃的情况.

修正 GuiContextMenu 在 x64 平台上正确设置 A_GuiEvent.

修正 如果文件不存在或无法打开, FileGetSize 有时会给出一个不确定的结果.

修正 线程中断时更完全地保存和恢复 ErrorLevel [由于意想不到的结果在 v1.1.20.01 版本恢复].

修正 ControlClick 坐标模式忽略被禁用的控件.

修正 当Gui +MaxSize 的窗口尺寸小于+MinSize 的奇怪状况.

修正 GuiControl/Get 传入 GUI 的 HWND 而需要 GUI 名的情况.

修正 元函数干扰 Exception() 所报告的行号的问题.

## 1.1.19.03 - 2015 年 2 月 11 日

改进按键映射来支持 `scXXX::Y` 当当前键盘布局不映射 `scXXX` 至 VK 码. 当然, `Y` 必须存在在当前键盘布局.

修正 `break n` 运转正常当当前是 `until` 的情况, 而不是终止线程.

修正 ControlGetFocus 破坏用户双击的能力(感谢 HotKeyIt).

修正 ListView 不调用 g标签 当消息事件是不支持或未知的情况, 例如 LVN_GETEMPTYMARKUP.

修正 `#Include *i <X>` 当 X 语法错误时退出程序.

修正 `for var in expression` 有时程序崩溃当 expression 调用一个脚本函数时.

## 1.1.19.02 - 2015 年 1 月 25 日

移除 Win9x/Win2k 上使用的 16 色图标支持.

移除 单独的托盘图标资源.

改进 选择 DLL/EXE 文件图标尺寸的功能.

- 简而言之, 宁愿降低图标的尺寸而不是大尺寸. 这在 125% 或 150% DPI 系统特别有帮助. 因为系统图标的尺寸是 20/40 或 24/48, 而不是 16/32. 如果所有这些大小都存在于图标资源中, 这种变化就没有什么区别.

修正 热键在加载时验证出错的情况.

- 热键永远都不可用时, 例如, foo::, 现在会视为错误而不是对键盘布局给出误导的警告.
- 像 ^!ä:: 这样的热键是无效的因为当前键盘布局可以有相同的动作, 并且标签被正确注册(例如 "^!ä" 而不是 "^!ä:"). 如果 /ILIB 命令行开关使用, 警告被抑制.
- 重映射是无效的因为当前键盘布局显示两个警告而不是不可恢复的错误.
- 当滚轮键被作为前缀键, 只有一个错误消息而不是两个, 这遵循 /ErrorStdOut.

修正 /iLib 开关写入文件即使语法出错.

修正 使用 try..finally 来修正 return/break/continue/goto.

## 1.1.19.01 - 2015 年 1 月 5 日

修复 Hotkey 命令在创建变量中已存在的热键时引起程序崩溃(由 v1.1.19.00 引入).

为 Hotkey 命令和 A_TimeIdle 做了多处优化(删除 Win9x 的支持).

## 1.1.19.00 - 2015 年 1 月 4 日

为 `Func.Call()` 增加了一个名字. `Func.()` 仍然可用但已废弃.

修正 一些错误当 `X.Y` 和 `X.Y(Z)` 在 VBScript/JScript/C#:

- 如果 `X.__Call` 包含一个函数 name, 会被返回而不是调用.
- 当 `X.Y(Z)` 返回一个值, Z 被忽略. 它实现像 `X.Y[Z]` 当 X.Y 不是函数.

修正 热键命令忽略 ~ 前缀当 标签 被省略.

修正 热键命令忽略 $ 前缀如果热键变种已经创建但没有使用 $.

修正 `%Fn%()` 语法以工作于 JavaScript 函数对象.

修正 EXE 的 manifest 来禁用 UAC 检测算法(由 v1.1.17 引入).

改进 线程在调试器的调用堆栈上的表现.

- 线程的类型被现实而不是标签名, 这在下一个堆栈入口任然有效, 热键, hotkey 显示相反.
- 子线程或者函数被调用后的行号被显示而不是开始之前的行号.

## 1.1.18.00 - 2014 年 12 月 30 日

改进 Autohotkey 对象的 IDispatch 实现:

- `X.Y` 在 VBScript 和 C# 中返回 X.Y 如果它不是函数对象; 以前则尝试调用 X.Y() 而不管类型.
- `X(Y)` 在 VBScript, JScript 和 C# 中返回 X[Y] 除非 X 是函数对象, 在这种情况下它被调用如前.
- `X[Y]` 在 C# 返回 X[Y] 如果 X 不是函数对象; 以前则尝试调用 X.[Y]() 而不管类型.
- `X.Y()` 在 C# 中返回 X.Y 如果它不是函数对象, 为了 C# 的歧义情况.
- 未处理的异常都转换为 IDispatch 异常.

添加 创建 JavaScript/IE DOM 对象的新特性的支持.

修正 `FileAppend, %VarContainingClipboardAll%, File` 导致的崩溃问题.

## 1.1.17.01 - 2014 年 12 月 28 日

修正 COM 事件句柄没有收到最后的对象参数.

## 1.1.17.00 - 2014 年 12 月 27 日

新特性:

添加 Format().

FileOpen() 现在通过将 `"*"` 或 `"**"` 作为文件名可以读取 stdin 或写入 stdout 或者 stderr. `AutoHotkey.exe *` 可以用来从另一个线程执行程序管道而不是读取文件. 例子查看 ExecScript().

添加 通过传递 Autohotkey 对象至 COM API 来实现 IDispatch.

添加 ComObject 包装的 VT_BYREF 支持. 使用 `obj[]` 来访问参考值.

错误修复:

修正 在 XP SP2 上的蓝屏.

修正 按值而不是按指针返回 ComObjArray. 也就是说, 返回的数组的副本, 而不是指向即将被删除的数组的指针.

修正 第一次运行在生成的示例脚本中的 URL.

修正 `sc15D` 映射到 `vk5D`/AppsKey(Send, GetKeyName 等等).

修正 Edit 控件不接受 AltGr+A 作为 Ctrl+A.

修正 静态类变量不作为一个标签的目标, 该标签立即优先于类.

## 1.1.16.05 - 2014 年 9 月 28 日

修正 x.y/[]/{} 有时错误地被标记为可变参数.

## 1.1.16.04 - 2014 年 9 月 16 日

修正 覆盖时只读属性产生的崩溃.

修正 当 RegExMatch 对象是未捕获的子表达式的崩溃情况.

## 1.1.16.03 - 2014 年 9 月 11 日

修正 Abs() 和 Mod()

## 1.1.16.02 - 2014 年 9 月 11 日

修复 支持在类中使用 #include(被 a6ea27f 破坏).

修正 某些情况剪切板返回二进制 CF_HDROP 数据.

改进 文件被打开的情况下 FileGetSize 的精度.

改进 for 循环在 COM 对象中的表现.

## 1.1.16.01 - 2014 年 9 月 10 日

支持在类中动态定义属性.

为 Gui 控件定位增加 x+m 与 y+m 选项.

为 ListHotkeys(列出热键) 中每个热键增加 #InputLevel 项.

优化带O(对象) 选项的 RegExMatch(正则查找). 某些情况下, 捕获长字符串较之前有极大提速.

修正 对象, 当 __Call 结束时将检测新方法(与 __Set 及 __Get 一致).

修正 一些 VarSetCapacity 失败后的未定义行为.

修正 FileRead, 使正确报告文件超 4GB 时的错误, 而非截断数据, 即便不需要这部分数据时.

修正 FileRead *c, 使当字节长度为奇数时, 亦能正确的放置空结尾字符.

修正 ClipboardAll 的问题, 作如下改变:

- #ClipboardTimeout 被 GetClipboardData() 忽略, 之前它也并未实际发挥作用却导致问题. 本修正解决剪切板为文件时(Windows 8 中的任何文件, 及 zip 或类似东西中的文件), 超时及丢失数据的问题.
- 为零长度剪切板内容分配1字节再返还给剪切板, 之前设置为零长度似乎有问题.
- 由 Scintilla 设置的 MSDEVColumnSelect/MSDEVLineSelec 将被保持, 但由 VS 设置的任何数据将被丢弃.
- 当直接将 ClipboardAll 写至文件时, 将优先使用 Unicode(ClipboardAll 的其他使用情况自 v1.1.08 起便如此).
- Unicode 版本中当 ClipboardAll 及 FileRead *c 数据长度为奇数时, 将向上取整到最近的偶数. 因此, 由 StrLen 返回的结果可能被加1, 避免可能对最后一个字节的截断.

修正 带负屏幕坐标值的 TreeView 控件的 A_EventInfo 值.

修正 ListView/TreeView 消息筛选中可能的问题.

修正 A_LineFile/A_LineNumber 在 #If 表达式中(无法正确返回设计值) 的问题.

修正 #If, 被添加到 ListLines 中(将显示为 If ).

修正 `Abs(["-"]*)`及类似情况下的崩溃问题.

修正 全局中`} funcdef(){`及`}}`结尾的方法/属性/类.

## 1.1.15.04 - 2014 年 8 月 12 日

修正 性能问题: `&变量包含长数字字符串`.

修正 问题: 当内置变量被赋值为对象时, 会破坏内存数据.

修正 解析器: 以禁止某些代码中的 `continue` 命令, 即便当前函数定义在 Loop 内.

修正 错误: `File.Encoding := x "-RAW"` 打断对非 ASCII 字符的编码/解码. `-RAW` 后缀现在被忽略.

## 1.1.15.03 - 2014 年 8 月 2 日

修正 使用 Exit 或 Throw 后元函数不正常退出线程的问题.

修正 未编译脚本中 FileInstall 的 Dest 为相对路径时, 使用 A_WorkingDir 的问题.

## 1.1.15.02 - 2014 年 7 月 7 日

修正 调试对象中负整数键的问题.

## 1.1.15.01 - 2014 年 6 月 30 日

改变内置的错误和警告对话框为置顶.

修正 `Until` 不会从递归的文件和注册表循环中中断的错误.

## 1.1.15.00 - 2014 年 5 月 4 日

添加 A_OSVersion 值 `WIN_8.1`.

改变 Hotkey 命令根据是否存在颚化符(~) 前缀应用或移除热键已有变体的穿透行为.

改变 exe manifest 以允许 GetVersion/GetVersionEx 检测到 Windows 8.1.

## 1.1.14.04 - 2014 年 4 月 25 日

修正 当 Function 为纯整数 0 时 DllCall() 会让脚本崩溃的问题.

修正 `IsFunc("ComObj(")` 返回错误而不抛出异常的问题.

修正 ControlClick 发送 XButton1/XButton2 时存在的问题.

## 1.1.14.03 - 2014 年 2 月 14 日

修正当 <c10>X. __Init 中止线程时 `new X` 中内存泄漏的问题.

修正当断点散布在方法定义中时会转移到类变量初始化位置的问题.

## 1.1.14.02 - 2014 年 1 月 30 日

修正 `x::` 和 `x up::`, 当 x 作为修饰键被阻止在按下触发时则让它们都在弹起时才触发. 在 v1.1.14 中的预期行为是当 x 还用于自定义组合键(如 `x & y::`) 的时候, 则 x 的单独热键和组合键都会在弹起时触发.

## 1.1.14.01 - 2014 年 1 月 15 日

修正 不带 Catch/Finally 的 Try 过程中无异常抛出时崩溃的错误.

## 1.1.14.00 - 2014 年 1 月 15 日

增加 Finally 语句用于 try/catch 后的清理操作. [fincs]

改变 自定义组合键中 ~ 前缀的行为, 使之更直观.

修正 `x & y::` 热键中, 在释放 x 时会触发 `x::` 和 `x up::` 热键的问题.

修正 ImageSearch, 当 GDI 调用失败时设置 ErrorLevel=2(而非 0).

修正 EnvGet, 当变量超过 32767 个字符时致使程序崩溃的问题.

修正 在 StatusBarWait 的 ErrorLevel 中一个小的错误处理缺陷.

修正 ANSI 版本中 FileRead *c 存在的堆损坏.

修正 递归调用中传递局部变量到可变参数函数.

修正 脚本第一行为小括号括住的表达式时, 脚本加载失败的问题.

修正 PixelSearch 快速模式, 使其仅在成功时才设置 OutputVarX/Y.

.

## 1.1.13.01 - 2013 年 10 月 11 日

修复 用已命名值调用带参可变函数.

## 1.1.13.00 - 2013 年 8 月 27 日

从v2测试版移植 StrSplit() 函数.

## 1.1.12.00 - 2013 年 8 月 14 日

可选参数可通过连写两个逗号的方式略过, 如 `InStr(a, b,, 2)`. 和之前版本不同的是, 这种方式可以用在对象(包括COM对象) 和内置函数中. `[a,,b]` 的写法可以用来创建稀疏数组.

对象属性现在可以通过使用可变值的方式赋予, 如 `x[y*]:=z` 中 y 包含了 键名/索引或一组参数.

## 1.1.11.02 - 2013 年 6 月 28 日

修复 GuiControl/Get 接受 ComboBox 的子 Edit 控件的 ClassNN. 已经支持指定 ComboBox 的子 Edit 控件的 HWND, 作为识别 ComboBox 的方法.

## 1.1.11.01 - 2013 年 6 月 25 日

修复 InputBox 默认的 宽/高(被 v1.1.11.00 - commit 7373cc6443 破坏).

修复 DllCall arg 类型验证以安全地处理 SYM_OBJECT, 并遵守 #Warn UseUnset(当变量名称不是有效类型时).

变更 VarSetCapacity(var) 没有警告未初始化的变量.

## 1.1.11.00 - 2013 年 6 月 21 日

增加 支持 `%A_LineFile%` 用于 #Include 中.

降低 AutoHotkeySC.bin 的文件大小通过减少(很少用) 文件类型图标的分辨率.

修复 `类 X 扩展 Y` 允许 Y 在 X 之后定义.

由 fincs 开发: AutoHotkey 现在是对 DPI 敏感的. 当 DPI 不是 96 时, Gui 命令自动补偿. 请参阅 Gui -DPIScale.

## 1.1.10.01 - 2013 年 5 月 17 日

改进 RegRead 支持 REG_BINARY 值大小超过 64K.

改进 RegWrite 支持 REG_BINARY/REG_MULTI_SZ 值大小超过 64K.

修复 进程关闭(以及可能的其他事情) 在 Windows XP.

## 1.1.10.00 - 2013 年 5 月 11 日

增加 基本支持自定义 Gui 控件.

改进 SoundSet, SoundGet 和音量管理对 Windows Vista 及更高版本的支持.

修复 `Run "<file>" <args>` 不作为的 args 的一部分传递空格.

修复 从控制台输入(CONIN$) 读取的一些问题 .

## 1.1.09.04 - 2013 年 3 月 14 日

修复 当 Gui 本身(不是控件) 有焦点时, Gui 菜单加速键不工作.

## 1.1.09.03 - 2013 年 2 月 9 日

修复 two bugs 影响了目标变量包含未刷新二进制数但具有零容量的某些赋值.

修复 GuiControl 和 GuiControlGet 当给定的 HWND 不属于当前 Gui 时, 作用于错误的控件. 相反, 条件被视为错误.

修复 OnMessage 函数在目标 Gui 是子窗口时正确设置 A_Gui 和 A_GuiControl.

## 1.1.09.02 - 2012 年 12 月 24 日

修复 MsgBox 在给定无效选项时显示错误消息, 而不是静默退出线程.

修复 类初始化中的语法错误导致程序崩溃而没有正确的错误消息.

## 1.1.09.01 - 2012 年 12 月 15 日

修复 AND/OR 跟在多语句逗号后面, 例如 `((x, y) and z)`.

修复 RegExReplace 正确支持重复的子模式名称.

修复 Object.Remove() 不释放字符串键.

修复 base.Invoke() 不依赖于动态变量解析.

## 1.1.09.00 - 2012 年 11 月 7 日

破坏性的变化:

移除 对 .aut 文件的兼容性和 #AllowSameLineComments.

移除 未公开的 AutoIt v2 命令.

向后兼容的改变:

允许使用 `:=` 而不是 `=` 来声明可选参数, 以便变量声明和表达式保持一致 .

未加引号的键允许非 ASCII 字符(`{key: x}` 和 `obj.key`).

变更 程序版本信息中的名称从 "AutoHotkey_L" 改为 "AutoHotkey".

Bug 修复:

修复 通过评估命令的参数, 警告对话框出现不稳定性.

修复 PixelSearch 快速模式将 "未找到" 作为错误来处理.

修复 ahk_exe 允许其他 ahk_ 条件在其后面.

修复 `else continue 2` 和类似的要求周围循环的大括号.

修复 成功读取二进制数据后, RegRead 提示失败.

修复 `File.Length` 补偿或刷新任何缓冲的数据.

修复 Gui 的大小调整考虑存在的滚动条.

调试器:

增加 支持异步命令.

改进 处理断点所在行例如 `else foo()` 或 `{ bar()` 以便调试器在适当的时候会真正中断.

优化 代码大小, 修复了几个错误, 使得调试器通常更加健壮.

## 1.1.08.01 - 2012 年 8 月 3 日

调试器: 修复 max_depth 是预期限制的一半或无限制.

## 1.1.08.00 - 2012 年 6 月 14 日

破坏性的变化:

变更 脚本默认的代码页变更为 ANSI, 因为之前的习惯容易引起混淆. UTF-8 格式文件现在必须有字节顺序标记(BOM) 才能被正确识别. 记事本添加 BOM 到任何保存编码为 UTF-8 的文件之中.

变更 `return x` 对于数字字串保持其格式; 完全等同于 `return (x)`.

变更 `Gui, Name: New` 设置新的 GUI 窗口为默认窗口 .

其他变更:

变更 ClipboardAll 优先使用 CF_UNICODETEXT 比其他文本格式.

变更 Gui Show 允许浮点数字.

变更 在 Windows 8 系统中 A_OSVersion 返回 WIN_8 .

变更 AutoHotkey.exe 文件说明引入 "ANSI/Unicode 32/64-bit".

变更 解析器允许类似于 `new MyObject()` 的行, 没有赋值.

升级 PCRE 到 8.30.

改进 warnings 的措辞, 并在警告对话框的底部添加了指向文档的指针.

调试器的改进:

- 增加 基本支持检查 Func, ComObject 和 RegExMatchObject 对象.
- 修复 在某些情况下, "附加调试器" 消息被忽略. 请参阅 83f0a0e 提交.

新特性:

增加 通过 `RegExMatchObject.Mark`支持 PCRE 构建体 `(*MARK:NAME)`.

增加 支持在类定义中的赋值 `classvar.x := y`(在声明 classvar 之后).

增加 A_Is64bitOS.

增加 SetRegView 和 A_RegView.

修复:

修复 `Func.()` 只有在省略了强制参数而不是使线程静默退出时才跳过函数调用.

修复 `Object.Remove()` 不释放对象的键.

修复 key-down/key-up 热键对, 只有在该热键对中有一个热键被启用时才能正确地抑制输入.

修复 `#Include <Lib>` 不影响工作目录, 后续使用 #include 指令.

修复 `objaddref()` 的作用就像 `ObjRelease()` 调用一个小写 'a'.

修复 A_AhkPath 在 32 位编译的脚本中检测 64 位 AutoHotkey 安装位置, 反之亦然.

修复 带有 `-Background` 选项的 TreeView 控件, 能在老的系统环境正确渲染.

修复 执行 While/Until 期间显示的错误信息, 能确定适当的行.

## 1.1.07.03 - 2012 年 3 月 25 日

修复 Ctrl/Alt/Shift key-down(键-按下) 热键打断在它之前定义的任何相应键 key-up(键-松开) 热键.

修复 键-按下热键如果在相同的一个键的键-松开 热键之后定义, 总是使用钩子. 如果键-按下 热键使用 "reg" 方法, 键盘钩子将阻止键-按下事件并且仅触发键-松开热键.

修复 加载时检查解释没有解引的表达式为原始文本. 例如, `gosub % "foo"` 之前在加载时解析为 `"foo":`. 类似的, `% ""` 即使允许空字符串, 在各种情况下也被视为无效.

## 1.1.07.02 - 2012 年 3 月 22 日

修复 当 GetClipboardData() 失败时, 可能会发生罕见的崩溃.

修复 ComObjArray() 在失败时返回一个空字符串, 而不是任意的整数.

修复 `Object.Remove(i, "")` 影响 `!Object.HasKey(i)` 的整数键.

## 1.1.07.01 - 2012 年 3 月 2 日

修复 当在 Unicode 版本读取 UTF-16 时, FileRead 忽略 #MaxMem.

修复 动态函数调用带有内置变量, 如 `%A_ThisLabel%()`.

## 1.1.07.00 - 2012 年 2 月 27 日

增强 `%var%()` 支持函数对象和默认的 __Call 元函数.

修复 ControlGet List 在列表视图中工作, 当脚本和目标进程一个是 32 位, 另一个是 64 位时.

修复 SendEvent 热键延迟为 0; v1.1.05.04 引入的更改导致其比预期更慢.

修复 Object.Remove(i) 不调整键如果 Object[i] 不存在.

修复 当 ComObjType() 通过替代名被调用时, 引起不可预知的行为的错误.

修复 ExitApp 退出线程, 如果 OnExit 子例程阻止脚本终止, 而不是在含有 ExitApp 的区块之后继续执行.

通过对象调用函数不再作为退出线程的障碍. 因此, 如果使用 Exit 或 class method 中产生运行错误, 整个线程将退出而不是仅仅是该函数.

使用 base.Method() 调用基类方法或类似在类定义中如果该方法不存在不再会导致 UseUnset 警告. 因此, 有实例变量的实例化对象如果基类没有实例变量, 不再会导致内置的 `base.__Init` 方法的警告.

## 1.1.06.02 - 2012 年 2 月 13 日

修复 在 Section 省略而 Key 不省略的情况下 IniRead 会崩溃的问题.

修复 当文件大小为 4GB 或更大时 FileGetSize 的精度.

## 1.1.06.01 - 2012 年 2 月 12 日

修复 MsgBox 逗号智能处理需要数字选项, 而不是标题.

## 1.1.06.00 - 2012 年 2 月 12 日

新特性:

整合 #InputLevel 指令和 SendLevel 命令 by Russell Davis.

整合 支持 Link 控件 by ChrisS85.

破坏性变更:

变更 命令解析器在参数的开头或结尾避免修剪转义字符, 如 ``t` 或 ``` .

变更 MsgBox 的智能逗号处理, 以改善稳定性和一致性.

- `%` 现在可用于选项或超时的表达式中.
- 如果第一个参数是表达式, 任何未括在双引号("") 或 ()/[]/{} 中的未转义逗号将导致使用多参数模式. 这些逗号以前被解释为多语句操作内的第一和唯一参数(文本).
- 当标题是表达式, 表达式中包含的未转义的逗号不再干扰智能逗号处理.
- 如果刚好有两个参数, 而第一个为空或整数, 则使用多参数模式. 以前是将两者结合成一个参数(文本).
- Timeout 能是原义数字或单个解引用(和可选的数字部分; 例如, `%Timeout%.500`). 与文档相反, 通常解析绝大多数以 `%` 开头的其他情况作为表达式(包含双重解引).
- 即使忽略文本和选项, 标题也可以是表达式.

变更 A_IsUnicode/A_IsCompiled 被定义为 ANSI 版本/未编译脚本中的空字符串, 而不是未定义. 这使他们能够检查而不会触发 #Warn 警告. 副作用包括:

- 试图直接分配 A_IsCompiled 或 A_IsUnicode 总是导致加载时错误. 动态赋值总是失败, 或者默默地或酌情错误对话框. 以前赋值被允许在未编译/非 Unicode 脚本.
- 尝试使用 A_IsCompiled 或 A_IsUnicode 的地址总是失败.
- A_IsCompiled 和 A_IsUnicode 当由未编译的/ Unicode 脚本引用时, 不再出现在 ListVars 中.

变更 当改变修饰键状态时, Send 和相关的命令, 要遵守 #MenuMaskKey.

其他变更:

变更 当 N=0 时, GuiControl Choose 移除 ListBox/ComboBox/DDL 当前的选择 .

变更 RegisterCallback 允许 Func 对象来代替函数名.

变更 ListLines显示文件名(编译时除外).

改进 使用 ShellExecuteEx 时, Run 如果可能的话输出进程 ID.

修复:

修复 RegRead 中的句柄泄漏.

修复 如果 x.y 不是数字, `x.y++` 和 类似的语句指定为空字串.

修复 SendInput Win+L 变通方法导致 Win 键 "按下滞留".

修复 如果 自动-包含使用 #Include <Lib>Ahk2Exe 自动-包含错误的文件.

## 1.1.05.06 - 2011 年 12 月 31 日

修复 当使用的对象区域含有字符时, inc (++) 和 dec (--) 不再有效.

修复 当使用未初始化变量时, inc (++) 和 dec (--) 产生警告.

## 1.1.05.05 - 2011 年 12 月 17 日

修复 当循环内没有大括号 "{..}" `continue n` 行为不当.

修复 `RegExMatchObject[Name]` 有重复的名称时正常工作.

## 1.1.05.04 - 2011 年 12 月 5 日

修复: ControlGet 的子命令 Selected 在 64 位中不稳定的问题.

修复: 在等待底层线程显示的对话框时, CPU 达到极限(并可能在其他情况下).

## 1.1.05.03 - 2011 年 11 月 30 日

修复 `Loop...Until 变量含有对象`.

## 1.1.05.02 - 2011 年 11 月 20 日

修复 在某些情况下加载编译过的脚本时, 文件结尾的错误检测.

修复 当 SendInput 发送特殊字符或 {U+xxxx} 时, 自动释放修饰键(被 v1.1.00.01 破坏).

修复 ComObjConnect 过滤掉 非-dispatch 接口, 而不是让脚本崩溃.

修复 `new %VarContainingClassName%()` 变量包含类名.

## 1.1.05.01 - 2011 年 10 月 16 日

修复 类声明允许指令, 如 #Include.

## 1.1.05.00 - 2011 年 10 月 8 日

增加 Client 坐标模式.

增加 object 输出模式在 RegExMatch 和 RegEx 调出.

增加 super-global(超级全局) 声明, 以避免需要重复的全局声明.

破坏性变更: 类声明例如 `Class c` 现在创建超级全局变量而不是普通全局变量.

增加 未处理的异常错误对话框的更多细节.

变更 `Gui +Owner` 即使在 GUI 创建之后也可以正常工作.

变更 类定义中的实例变量声明以避免在类对象中留下空的键-值对.

变更 #Include 在失败时使用标准的错误消息格式(更多细节; 也遵守 ErrorStdOut).

变更 当参数省略时 Throw 默认抛出 Exception 对象.

变更 运行时的错误消息格式, 稍微改善一致性和代码大小.

修改 PCRE 以便在 Unicode 构建中使用 UTF-16 作为输入, 提升性能.

升级 PCRE 到 8.13.

修复 当表达式中的赋值失败时, 线程不按预期退出.

修复 #MaxMem 阻止不需要扩展的变量赋值.

修复 Try/Catch 不能捕获 COM 错误.

修复 在某些情况下 GuiControlGet 将参数＃2 错误地视为无效.

修复 输入的变量太快转变, 允许他们在同一行后的表达式中失效.

修复 RegEx 调出当抛出异常时不会导致匹配中止.

修复 当 ErrorLevel 应该为 -3 时, DllCall 设置其为 -4.

修复 While 第一次迭代时, 在 ListLines 中出现两次.

修复 Try/Catch 允许 If/Loop/For/While 没有封闭的区块.

修复 在 Until 用于跳出 For-loop 循环时, 枚举器对象不被释放.

## 1.1.04.01 - 2011 年 9 月 15 日

修复 FileRemoveDir 不能正确设置 ErrorLevel 的问题.

## 1.1.04.00 - 2011 年 9 月 11 日

警告: 这个版本包含许多潜在的破坏性变更.

增加 表达式处理支持: try/catch/throw 和 Exception().

增加 标准输出流模式支持 #Warn.

增加 Gui +HwndVARNAME 选项.

增加 Gui, New [, Options, Title].

增加 自动支持键盘快捷键, 例如 Ctrl+O 在 Gui menus.

变更 当存在 /iLib 命令行开关时, 处理 `#Include <Lib>` 以解决 Ahk2Exe 的问题.

变更 当 Progress 控件样式改变时, GuiControl 保留它的当前值 .

变更 GuiControl 和 GuiControlGet 允许在 ControlID 参数中传递 HWND.

移除 FileRead 1GB 的限制.

改进的错误检测:

- `Hotkey, If, 表达式`, 当 表达式 不匹配存在的 #If 表达式, 可能在加载时被捕获.
- `Hotkey, IfSomething`, 当 Something 是无效的, 在加载时被捕获.
- 缺少括号("{...}") 的类定义被检测为错误.
- 如果在类定义的第一行使用了函数调用, 则它现在正确地视为错误.
- 当窗口组名为空时, GroupAdd 现在显示错误消息, 而不是静默地退出线程.
- 当使用 OutputDebug 或 StdOut 警告模式时, 移除多余的 "unset var" 警告.
- 如果在 Gui, Gui Show, Gui New 或 GuiControl 命令中使用无法识别的选项, 将显示一条错误消息以及线程退出(try 命令使用时除外). 由于其复杂性, 此验证在加载时不进行(选项参数通常包含变量引用).
- RegRead, RegWrite 和 RegDelete 现在将 A_LastError 设置为操作系统 GetLastError() 函数返回的结果.
- 如果 +LastFoundExist 与另一个选项组合, 现在将其视为错误(在这种情况下应该使用 +LastFound).

修复 bug 影响递归可变函数.

## 1.1.03.00 - 2011 年 8 月 28 日

增加 支持 GUI 名称.

增加 支持通过 HWND 识别 GUI .

增加 `+Parent%ParentGui%` Gui 选项.

增加 通过 `+Owner%HWND%` 支持额外的窗口从属于 Gui.

增加 GuiControlGet 子命令 Name.

增加 通过 Gui 命令支持 ActiveX 控件.

修复: 空 hotkey 控件返回 "vk00".

修复: COM events 或 ComObjConnect 崩溃及相关的内存泄漏.

修复: `GuiControlGet OutputVar, Subcmd,` %OutputVar% 总是失败的问题.

变更 "Missing )/]/}" 错误消息比 "Unexpected )/]/}" 更清晰.

变更 ListLines 显示每次迭代执行的 While 和 Until 行.

变更 ~= 优先级高于 =/!=/</>/<=/>= 但是低于连接("."), 添加相关说明到帮助文件中.

## 1.1.02.03 - 2011 年 8 月 21 日

修复(调试器): 子项数目属性不包括 Object.Base.

## 1.1.02.02 - 2011 年 8 月 20 日

修复: 在 x64 构建中, 变量的容量被限制在 2GB.

修复: 最后找到的窗口不被 `#if WinExist(T)` 设置.

## 1.1.02.01 - 2011 年 8 月 13 日

变更 A_PriorKey 排除 key-up 事件.

修复 在某些情况下进程的名称或路径检索, 包括:

- 从 32 位脚本检索 64 位进程的名称/路径.
- 从非提权(UAC) 进程检索提权进程的名称或路径.

## 1.1.02.00 - 2011 年 8 月 6 日

增加 TV_SetImageList().

需要非标准 Shift 状态( 16 和 32 ) 的字符现在回退到原来的方法, 而不是产生错误的按键.

改进 处理死键解决多个脚本中热字串激活时产生的问题.

## 1.1.01.00 - 2011 年 6 月 30 日

增加 使用简单赋值语法支持类定义中的实例变量.

移除 类定义中使用 `var` 关键字; 使用 `static` 代替.

增加 新的内置变量: A_ScriptHwnd 和 A_PriorKey.

增加 新的内置函数: GetKeyName(), GetKeyVK(), GetKeySC() 和 IsByRef().

增加 新的子命令: WinGet, OutputVar, ProcessPath.

增加 通过进程名称或路径 `ahk_exe %Name%.exe` 或 `ahk_exe %FullPath%` 指定窗口的功能.

优化 WinGet 的子命令 ProcessName.

变更 如果标签忽略时, SetTimer 使用 A_ThisLabel.

升级 ComObjConnect() 支持使用对象代替函数名前缀.

改进 ComObjConnect() 允许 前缀/对象 更新而不先断开连接.

改进 允许表达式解析连续部分, 例如, 没有转义的 "(" 字符在 `(x.y)[z]()`.

更换 用于将脚本文本存储在 32 位编译脚本中的方法; 现在与 64 位一致.

修复 在活动窗口的键盘布局中检测 AltGr(Unicode 构建).

修复 一些情况下, SendInput 在 AltGr-up 之后产生一个多余的 LCtrl-up.

## 1.1.00.01 - 2011 年 6 月 17 日

修复: 当发送特殊字符时, 修饰键不会自动释放的问题.

修复: 扫描码/修饰键映射冲突, 例如 sc1xx vs ^sc0xx.

修复: $ 和 #UseHook 如果仅在热键的第二个或后续实例上使用, 则不起作用.

修复: 从 __Delete 元函数返回值时可能发生崩溃.

修复: "未初始化的变量" 的警告是由调试器触发的.

变更: `base.Method()` 不在触发默认的 元函数或警告.

变更: `Gui +(Ex)Style` 不在 隐藏/显示 Gui 窗口.

变更 调试器将未初始化变量报告 type="undefined".

增加 当字符确实需要 "hankaku" 键时, 检查以避免不正确的发送击键.

增加 支持整数作为类变量名.

增加 "Static" 关键字用于声明类对象.

## 1.1.00.00 - 2011 年 5 月 1 日

新特性:

实现了基本的类定义的语法.

实现了 `new` 关键词用于创建派生对象.

增加 Func() 用于获取现有函数的引用和改进 IsFunc 来识别函数引用.

增加 在对象区域支持 `++` 和 `--`, 例如 `x.y[z]++`.

变更:

变更 __Delete 不再触发 __Call.

变更 OnClipboardChange 在可能的情况下(例如, 在 Windows Vista 及以后的系统中) 使用 AddClipboardFormatListener 以提高稳定性.

带有 `(` 的自动连接更具选择性, 所以一些无效的表达式, 例如, `12(34)` 将不再工作.

修复:

修复 `SetTimer Label, -0` 被视为 "允许一次, 马上".

修复 A_MyDocuments 等使用 SHGetFolderPath, 而不是未公开的注册表键.

修复 非空 ExcludeText 导致没有文本的窗口被排除.

## 1.0.97.02 - 2011 年 4 月 14 日

修复 当表达式封闭在 `{}` 时, 逗号被误作为参数的分割符.

修复 仅在 表达式 参数计算之后, For-loop 才设置 A_Index, 以便可以使用外部循环的值.

修复 默认脚本位置是基于包含 EXE 的目录(如文档所示), 而不是工作目录.

改进 加载时的验证以检测用 Goto 跳出函数的无效尝试.

## 1.0.97.01 - 2011 年 4 月 2 日

修复 64 位构建不缩短 HWND 或 SendMessage/PostMessage 参数到 32 位.

修复 `*/::` 被当作无效热键(从 L54 版本开始).

修复 图标.

## 1.0.97.00 - 2011 年 3 月 28 日

增加 `{key: value}` 作为 `Object("key", value)` 的语法糖.

增加 `[x, y, z]` 作为 `Array(x, y, z)` 的语法糖, 这是个相当于 `Object(1, x, 2, y, 3, z)` 的新函数 .

增加 轻微的优化: 当表达式加载时, 解析任何对 True, False, A_PtrSize 或 A_IsUnicode 的引用.

修复 热键解析, 对 `x & ^y` 作为错误而不是忽略 `^`.

## 1.0.96.00 - 2011 年 3 月 21 日

新特性:

ComObjQuery: 查询 COM 对象的接口或服务.

ComObjFlags: 获取或改变控制 COM 包装器对象行为的标志.

ComObjCreate 允许 非 dispatch 对象的创建, 如果指定了 interface identifier(IID, 接口标识符).

COM 数组支持 for-loops 和 Clone() 方法.

ListVars 显示每个 COM 包装器对象内部变量的类型和值, 以及包装器的地址.

变更:

当原义整数或包含数字字符串和缓存的二进制整数两者的变量赋值到对象的字段时, 储存整数而不是字符串. 这特别有利于脚本调用接收整数而不接受字符串的 COM 方法, 或是根据值的类型具有不同结果的COM 方法.

ComObjParameter 对 VT_UNKNOWN 和 VT_DISPATCH 类型现在接受空值.

改进 对公共语言运行库(.NET) 对象的支持, 通过 COM.

FileRecycle 现在应该在删除太大而无法回收的文件之前发出警告.

当使用 ComObjArray 创建的 SafeArray 分配给另一个 SafeArray 的元素时, 将创建单独的副本. 这可以防止脚本由于第二次尝试 "销毁" 数组而崩溃. ComObjFlags 允许避免这种行为.

修复:

VT_DISPATCH 或 VT_UNKNOWN 赋值到 COM 数组, 使脚本崩溃.

在某些情况下, 在循环之外允许 Break 和 Continue.

独立的回车(`r) 不能正确解析为行的结束.

MouseMove 在 Input 和 Event 发送模式中, 错误计算负坐标.

从托盘菜单选择 Edit This Script 或 使用 Edit 命令使脚本崩溃(从 v1.0.95 起产生该错误).

在某些情况下, 错误对话框指向不相关的代码行.

## 1.0.95.00 - 2011 年 3 月 12 日

优化 文件 I/O.

增加 #Warn 去协助调试; 由 ac 初始设计.

默认, 如果 name_var 包含函数, `name_var.()` 调用该函数. 这可以像以前一样, 通过默认基对象覆盖.

Run 支持动词作为参数, 例如, `Run *RunAs %A_ScriptFullPath% /Param`.

如果运算符既能接收一个运算对象(`&x`) 也能接收两个 数字的 运算对象(`x & y`) 紧跟在带引号的原义字符串后, 自动连接发生以及运算符仅应用到右边的运算对象. 因为, 带引号的原义字符串总是被认为是非数字的. 因此, 数字运算符没有有效的输入. 例如, 像这样的 `"x" &y` 和`"x" ++y` 表达式现在能正常工作.

修复:

- 在特殊情况下, 通配符热键不遵从修饰键, 例如, `^!+`.
- File.Pos 对于非搜寻文件类型返回无效信息; 现在返回 -1.
- File.AtEOF 在某些情况下不正确.
- 在某些情况下, COM 包装器对象未设置 A_LastError.
- 在 Windows 2000/XP/Server 2003 系统中, Gui 子菜单的图标不能正常工作.
- 如果 高 > 宽, SplashImage 裁剪图像.
- 当第一个参数是无效时, ComObjConnect 不会警告.
- 为了兼容性, SplashImage 只在其他方法失败后才使用 GDI+.
- "~" 在 `~x::` 现在对 `x & y::` 有效, 同样的方式在 `~x & z::`, 而不是没有效果.
- 当使用 #If 时, A_PriorHotkey 和 A_TimeSincePriorHotkey 现在能得到预期的值.
- 如果字符串包含非 ASCII 字符时, RegExReplace 在匹配失败后不能提出正确的字符.

## 1.0.92.02 - 2011 年 1 月 19 日

修复 在对象调用返回的结果或内置函数返回的结果没有使用时, 导致的内存泄漏, 例如, `file.ReadLine()` 或 `SubStr(x,y,z)` 单独在一行.

在 v1.0.92.01 中所做的修复替换为更好的修复, 这也修复了 `k::MsgBox(),x:=y` 以及不打断 `if()`.

## 1.0.92.01 - 2011 年 1 月 18 日

变更: FileCreateDir 现在设置 A_LastError.

修复: 在某些情况下, `GuiControl()` 或类似的语句被错误的当作命令.

## 1.0.92.00 - 2011 年 1 月 13 日

增加 对象的混合赋值, 例如, `x.y += z`.

在 Unicode 构建中, 改进 IniWrite. 阻止空行出现在新文件的开头.

改进语法解析器. 允许其跟在 `{`/`}`/`Else` 后面, 特别是连接时.

## 1.0.91.05 - 2011 年 1 月 1 日

修复: COM 方法调用中的清理代码释放了错误的参数.

修复(ANSI): DllCall 在输出时, 设置 Wstr 参数的长度不正确.

修复: 当参数对象为空时, 可变参数函数调用不稳定.

## 1.0.91.04 - 2010 年 12 月 29 日

修复(Unicode): RegExReplace 忽略起始位置之前的所有文本(从 1.0.90.00 开始起产生此错误).

## 1.0.91.03 - 2010 年 12 月 27 日

修复: RegEx 调出子模式变量 - 由 v1.0.90.00 起被破坏.

## 1.0.91.02 - 2010 年 12 月 26 日

COM: 增加了针对 NULL IDispatch/IUnknown 指针的保护.

COM: 如果 VT_DISPATCH 被明确传递, 跳过 QueryInterface for IDispatch.

轻微的可维护性修复: `obj.field := var` 现在正确的产生 SYM_STRING, 而不是 SYM_OPERAND.

## 1.0.91.01 - 2010 年 12 月 24 日

修复: 在文本读取后, `File.Write(Str)` 意外的结果.

修复: 文件没有 BOM 时 UTF BOM 的检查导致的意外结果.

修复(ANSI): loop 解析和 `File.ReadLine()` 将 `Chr(255)` 作为 EOF.

修复(Unicode): UTF-8 和 UTF-16 长度不同导致的 RegExReplace 错误.

修复: 禁止最后的热键钩子阻止输入.

增加: RegExMatch/Replace 的简单优化.

## 1.0.91.00 - 2010 年 12 月 21 日

此版本中的所有更改都与 COM 相关.

增加: ComObjError 现在返回先前的设置.

增加: ComObjType(co) 和 ComObjValue(co).

增加: ComObjMissing().

增加: ComObjArray() 和支持基本的 SAFEARRAY.

增加: ComObjParameter() 的 "Take ownership" 参数.

变更: 在调用函数的过程中, 不再释放通过 ComObjParameter 传递给 COM 函数的值.

变更: 如果没有找到成员 'x', `ComObj.x()` 现在回到 PROPERTYGET. 这修复了某些对象在 for-loops 中的使用.

变更: 在对象中包装未处理的变体类型, 而不是返回整数值.

变更: 默认情况下, 自动管理 VT_UNKNOWN/VT_ARRAY 的周期.

## 1.0.90.00 - 2010 年 11 月 27 日

修复: 在 Windows < 7 的 Unicode 构建中 UrlDownloadToFile 的使用.

修复: 在 ANSI 构建中, 大写 ANSI 字符作为 Alt + 0 发送.

修复: 在试图读取过去的文件结束符 EOF 后, File.Pos 不正确.

修复: 在 #If 表达式和静态初始化中使用转义序列.

修复: ClipboardAll 有时用某些格式使脚本崩溃.

修复: Transform HTML 正确计算 &#NNN; 条目的长度.

修复: 对于 ByRef 变量, VarSetCapacity 现在正确的忽略 #MaxMem 的设置.

修复: `FileAppend,,file.txt` 即使成功了也设置 ErrorLevel=1 .

修复: 对于使用 P) 选项的 RegEx 调出, 匹配长度被错误计算.

综合 Sean 对 COM 外部接口中处理数字的改进.

优化 RegExReplace 和 RegExMatch 在 Unicode 版本.

## Revision 61 - 2010 年 10 月 3 日

增加: `ObjClone(Object)`, 当 `Object.Clone()` 执行时被遗忘.

增加: 在 Unicode 版本中支持正则表达式的 Unicode 属性. 同时升级 PCRE 到 8.10.

增加: `Object.Remove(int, "")` 移除 `Object[int]` 而不影响其他键.

变更: `ComObj.xyz()` 现在总是被视为一种方法调用.

变更: 为了保持一致性, `Var := 123` 现在保留为表达式. 这使 `Var := 123` 和 `Var := (123)` 是相等的, 而之前的前者只赋值字符串, 后者赋值了字符串和缓存的二进制整数. 特别地, 这避免了一些在 COM 对象中混乱的类型不匹配错误.

修复: 动态变量调用带有强制参数的函数.

修复: 假设全局变量函数的最后一个参数必须被明确声明为本地.

修复: 静态初始化程序干扰断点设置.

修复: 在 64 位构建中, 更多与 PCRE 调出相关的指针大小相关错误.

修复: Input 带有 'M' 选项时, 将 Ctrl-M(``r`) 作为 Ctrl-J(``n`).

修复: 如果 `Object[n]` 不存在时, `Object.Remove(n)` 返回 0(而不是 "").

## Revision 60 - 2010 年 9 月 24 日

增加: File.Encoding. 通过文件对象改变或获取正在使用的代码页.

增加: 可变参数函数和函数调用和 indirect mode 用于回调.

增加: Object.Clone()

变更: ByRef 参数不再需要调用者提供变量.

变更: `Obj.foo := ""` 现在可以按照原来的目的释放 foo 的内容(但仍然不会删除该字段).

变更: OnMessage 函数现在允许可选和 ByRef 参数.

变更: RegisterCallback 现在可以在 32 位版本的回调中执行访问(已经在 64 位版本中做了).

变更: RegisterCallback 现在将忽略显示的 ParamCount="".

修复: For-loop 将脚本枚举中的非表达式的 "0" 作为真.

修复: 在 ANSI 构建中, ComEvent (ComObjConnect) 不能正常工作.

修复: ComEvent (ComObjConnect) 调用已经运行的函数时, 不正确备份/还原本地变量.

修复: 当没有结束字符时, A_EndChar 缓冲区溢出.

修复: Func->mNextFunc 不初始化 NULL(只用于低级脚本).

调试器: 增加了获取对象内容的能力(支持的调试器客户端).

调试器: 修复一些 bug.

## Revision 59 - 2010 年 9 月 12 日

修复: 在所有的情况下, #If 表达式 现在应该在每次按键时, 每个 表达式 最多只计算一次.

变更: SplashImage 使用常见的图像加载例程; 现在支持 PNG 和类似的格式, 但结果可能不同于之前的图标文件.

增加: `For x,y in z`.

增加: `Loop ... Until 表达式`, 可用于任何循环或 For 循环.

增加: 命名循环; `continue outer_loop`, `break 2`, 等等.

调试器: 将标准输出和标准错误输出数据包编码为 UTF-8.

调试器: 当初始化连接失败时, 允许用户终止, 重试 或 忽略.

调试器: 允许通过向脚本发送注册窗口消息来附加调试器客户端.

调试器: 允许通过发送 "detach" DBGp 命令来分离调试器客户端.

## Revision 58 - 2010 年 9 月 5 日

增加: `static var := expression`.

## Revision 57 - 2010 年 9 月 4 日

修复 64 位系统中, DllCall 的 Str*, WStr* 和 AStr* 返回类型.

增加 InStr 的功能, 使之符合 StringGetPos:

- 如果 StartingPos 是负数, 从末尾的偏移量开始从右到左搜索.
- 附加参数可用于指定要查找的字符串出现的位次.

增加 `#include <LibName>` 用于明确地包含函数库文件夹中的脚本.

增加 IniRead 和 IniWrite 的功能, 允许整段被读取或写入.

增加 IniRead 的功能, 允许获取段名列表.

增加 Run/RunWait 中对自定义动词的支持: `Run *verb file`.

对 Run/RunWait 从目标参数提取操作及其参数的方式进行了改进.

变更 NumGet/NumPut 以允许 Offset 完全省略, 因为 Type 总是非数字的.

移除 标签不能指向块的结尾的限制.

## Revision 56 - 2010 年 8 月 29 日

增加 64 位系统支持编译脚本. 需要 Ahk2Exe_L 和 x64 AutoHotkeySC.bin.

修复: Deref 操作符 (`*addr`) 拒绝 32 位范围以外的地址.

修复: 在 64 位中, `#If 表达式` 内存分配错误.

修复: 自定义的热字串终止符的代码点大于 U+00FF.

修复: 特殊字符通过 SendInput/Play 被顺序发送.

修复: `*/` 在连续部分被丢弃(请查看 L54).

## Revision 55 - 2010 年 8 月 19 日

修复: 如果没有指定 Label, GroupActivate 不设置 ErrorLevel = 1.

修复: 在 x64 构建中, Tab 控件的使用.

修复: 当长度省略时, StrPut 的字符串复制模式; 从 L53 开始被破坏.

修复: 在 x64 构建中, 数据对齐的问题.

变更: 为更多 File* 命令设置 A_LastError 以协助调试.

包括 FileAppend, FileRead, FileReadLine, FileDelete, FileCopy, FileMove, FileGetAttrib/Time/Size/Version 和 FileSetAttrib/Time.

排除 FileCopyDir, FileRecycle, FileMoveDir, FileRemoveDir, FileRecycleEmpty, FileCreateDir 和 FileInstall 因为这些 API 的使用时设置或返回不一致的 Win32 错误代码.

## Revision 54 - 2010 年 8 月 15 日

修复: Unicode 构建下使用 RunAs.[jackieku]

修复: 64 位构建下使用 RegisterCallback. [fincs]

修复: 可执行文件无法在 Win2k 和 WinXP SP2 之前的系统中运行. Win2k 需要 SP4 以及更新(可能 KB 816542). XP 未测试.

修复: 诸如 MsgBox 之类的对话框在被另一个脚本线程中断时变得无响应. 在 L45 中添加的消息过滤器/解决方法必须删除.

修复: 默认 ANSI 代码页中的多字节字符; 这也导致内存泄漏.

修复: ComObject 现在允许纯数字化的 property/method 名称.

提高 FileOpen/File 对象的可用性和功能.

- FileOpen 的 Flags 参数接受人类可读的标志字符串.
- FileOpen 的 "update" 模式已经重命名为 "read/write" 和现在创建文件, 如果它不存在.
- FileOpen 酌情设置 A_LastError.
- `File := FileOpen(handle,"h")` 包装对象中存在的文件句柄.
- `File.Seek(n)` 当 n 为负数时默认为 SEEK_END.
- `File.Pos`(或 `File.Position`) 能被用于 Tell 和 Seek.
- `File.Pos`, `File.Length`, `File.AtEOF` 和 `File.__Handle` 没有空括号也可以使用`()`.
- `File.Length` 可以设置, 如 `File.Length:=n`.
- `File.ReadNum()` 和 `File.WriteNum(n)` 读或写一个数字, Num 是 NumGet 兼容的类型名称.
- `File.WriteLine(s)` 等同于 `File.Write(s "`n")`, 对称于 `File.ReadLine()`.
- `File.Read()` 在没有参数的情况下读取并返回文件的剩余部分.
- 文件对象现在为无法识别的方法或无效的语法返回 "" 而不是数字地址的 "".

变更: GroupAdd 的标签参数现在应用到整个组. [讨论]

变更: GroupActivate 在成功/失败时会设置 ErrorLevel.(与上同一帖子.)

变更: 如果没有 `/*`, 在行开始的 `*/` 将被忽略. [讨论]

移除 Transform 下的 ToCodePage 和 FromCodePage 子命令.

## Revision 53 - 2010 年 8 月 8 日

与 AutoHotkey64 合并 - COM 支持和 64 位兼容性.

x64 (自 AutoHotkey64 以来的变化):

- 修复 DllCall 的浮点返回值和异常处理.
- 修复 RegEx callouts.
- 为 DllCall 重新启用 GetProcAddress 优化.
- 在 64 位的版本中 NumPut 和 NumGet 默认为 "Int64".

COM (自 AutoHotkey64 以来的变化):

- 允许 ComObjParameter 在 32 位构建中包装 64 位值.
- 在 ComObjActive 中实现了更多的标准引用计数约定.
- 在某些情况下, 阻止新的 ComObject 附加 AddRef.
- 不将 Invoke 中的 pdispVal==NULL 返回值作为错误.
- 当给定错误的对象类型时, 失败更可预测.
- 需要在 ComObjType 中明确第二个参数, 不再假定为 "IID".
- ComEvent 调用函数后的释放本地变量.
- 移除 ComEvent 中的 pVarResult 参数 ; 用返回值代替.
- 在每个 ComEvent 调用中传递原包装器 ComObject.
- 添加上下文到 ComError 对话框; 让按钮更有意义.

为枚举器实现了常见的语法验证代码. `Enum[]` 和 `Enum.Next()` 现在支持有或没有参数. 在 AutoHotkey_COM/AutoHotkey64 中工作的 `Enum[]:=val` 和类似模糊形式是不被允许的.

"Ptr" 类型仍然是有符号的(与 AutoHotkey64 不同), 以获得最大的适应性和一致性.

其他变更:

增加: `Object.HasKey(key)`.

增加: `Object(obj)` 增加对象的引用计数并返回其地址.

增加: `ObjAddRef()` 和 `ObjRelease()`.

修复: A_ThisHotkey 现在和 #If 一起使用时, 能得到预期值.

修复: Unicode 版本 RunAs 的使用(jackieku 修复).

变更: ANSI 版本默认脚本的 codepage 现在是 CP0(ANSI).

变更: `x.y[]` 现在相当于 `(x.y)[]` 而不是 `x["y"]`.

变更: 现在可以使用或不使用下划线前缀来调用内置方法(例如, `obj.MaxIndex()` 或 `obj._MaxIndex()`).

## Revision 52 (again) - 2010 年 6 月 10 日

增加 在双重引用中支持内置变量和环境变量.(译者增加示例如下:)

    C=A_ScriptFullPath
    if (%C%="G:\Users\xxx\Desktop\test.ahk")  ; 以前的版本中该句脚本判断结果为否
      msgbox % %C%

一个普通变量双重引用的例子

    C=qq
    qq=我
    if (%C%="我")  ; 该句脚本判断结果为真
      msgbox % %C%

改进 在某些代码页中, 对多字节字符的支持(以前的版本中, 代码页 932, 936, 949, 950 和 1361 是被支持的).

修复: 在不支持 WC_NO_BEST_FIT_CHARS 的代码页中, 例如 UTF-7, StrPut 失败的问题.

修复: 双重引用作为对象 - `literal%var%.literal`.

修复: `StrPut("", Encoding)` 空终止于无效地址.

## Revision 52 - 2010 年 6 月 12 日

修复: ObjRemove 的键参数现在是可选的, 正如, Object._Remove.

修复: 文件在读取时, 不能正确的被锁定, 不同于旧版本.

修复: 大写的十六进制格式导致负整数变成无符号类型.

修复: 当满足特定条件时, RegExMatch 破坏输出数组项目. 请参阅 bug 报告.

## Revision 51 - 2010 年 4 月 11 日

变更: 使用 <程序文件名>.ahk 代替 AutoHotkey.ini 或 AutoHotkey.ahk.

变更: 脚本文件默认为 UTF-8; 用 /CPnnn 重写.

修复: 脚本退出时不再暂停, 以便对象 __Delete 元函数正常运行.

## Revision 50 - 2010 年 3 月 27 日

改进 Object._Insert 的适应性.

- `Object._Insert(x)` - 在 `_MaxIndex()="" ? 1 : _MaxIndex() + 1` 位置插入 x .
- `Object._Insert(i,x,y,z)` - 在 `i,i+1,i+2` 位置插入 `x,y,z` .

改进 Object._Remove 的适应性.

- `Object._Remove(k)` - 移除并返回 k 关联的值.
- `Object._Remove()` - 移除并返回 _MaxIndex() 所在位置的值.

增加 文件共享模式标志到 FileOpen [by jackieku].

修复: RegExMatch 'P' 选项错误输出 1, 对于不匹配任何内容的子模式.

修复: `Object._SetCapacity(key,n)` 在某些情况下不是空终止.

修复: StatusBarGetText 在 Unicode 版本中只返回一半的文本.

## Revision 49 - 2010 年 3 月 14 日

增加 obj._NewEnum().

增加 ObjMethod(obj). 为每个内置的方法 `obj._Method()` 添加 ObjMethod(obj).

变更: ObjSet/Get/Call 不再被脚本调用/重写.

修复: L48 中增加的 VK_PACKET 检测导致的潜在的崩溃风险.

修复: VK_PACKET 事件中的字符码可能被误认为扫描码.

修复: ExcludeText 在第一次匹配控件后无效.

## Revision 48 - 2010 年 2 月 21 日

修复: 独立的 `obj.()` 不再被识别为错误的表达式.

ControlSend 现在能使用 WM_CHAR 支持没有关联键码的字符. 例如, 这适用于 "…"(en-US), "∞" 在 Unicode 构建和 `{U+221e}` 在任一构建.

对 VK_PACKET(VK=E7) 事件, KeyHistory 现在显示完整的16位字符. Send 可以间接生成 Unicode 字符.

## Revision 47 - 2010 年 2 月 13 日

修复(Unicode): ControlGet, 列表视图中获取条目列表.

## Revision 46 - 2010 年 2 月 11 日

增加 A_FileEncoding, 返回当前的默认编码设置.

增加 StrPut 和 StrGet 扩展了许多新的特性.

## Revision 45 - 2010 年 2 月 8 日

增加 _GetAddress; _SetCapacity/_GetCapacity 在一个指定区域生效. [更多信息]

增加 由子类化导致的 WM_PAINT 无限循环的解决方法.

允许 `obj.()` 作为一种手段来调用对象的默认方法; 相同于 `obj[""]()`.

开发: 增加了 MSBuild 4.0 & VS2010 的决方案和项目文件. [更多信息]

修复(Unicode): 'Running' 列在 ListHotkeys 中.

## Revision 44 - 2010 年 2 月 7 日

修复: 尝试设置 "nothing" 导致脚本崩溃. 例如, `x[]:=z`.

修复(Unicode): 不能找到默认的脚本(Documents\AutoHotkey.ahk).

修复(Unicode): 从注册表读取 A_Desktop, A_ProgramFiles 和其他几个内置变量的值导致字符串不正确的终止.

修复(ANSI): InStr 或 StringReplace 不能找到 0x80-0xFF 区域的字符.

变更(ANSI): ToCodePage/FromCodePage 像对其他 未支持/无效 子命令一样处理.

## Revision 43 - 2010 年 1 月 29 日

修复: obj.Func() 当应该是空字符串时, 却产生一个随机整数的错误.

## Revision 42 - 2010 年 1 月 28 日

与 AutoHotkeyU 合并.

大量 bug-修复和改进, 与之相关的内容的合并.

## Revision 41 - 2009 年 12 月 20 日

修复: 在浮点数字作为对象的键时, 相当于空值. 现在利用 float format 将其转换为数字字符串, 按照原来的意图.

## Revision 40 - 2009 年 12 月 13 日

变更 元函数和多参数行为来提高适应性. 现在调用元函数之前(*before*) 搜寻基对象的相应字段; 因此, x.base 的值将覆盖元函数定义的 x.base.base 的值. 现在通过避免 "Return", 链式元函数(继承的) 是可行的.

改进 默认基函数与实际对象更一致.

变更(调试器): 当步进式调试代码时, 跳过除了以函数结束的所有区块.

变更(调试器): 当步进式调试隐藏在脚本末尾的 "Exit" 时, 认为它是在最后的物理行之后(*below*), 以避免混淆.

## Revision 39 - 2009 年 12 月 2 日

修复(调试器): 在 Base64 解码采用 property_set 产生的错误.

## Revision 38 - 2009 年 11 月 17 日

增加: #MenuMaskKey 指令改变用来屏蔽 Win 或 Alt keyup 事件的按键. 请参阅这一主题的背景信息

变更: 如果 `x[1,2]:=3` 创建一个对象 `x[1]`, 他的基不在自动设置为 `x.base`. 请参阅子类化数组嵌套控制这种行为的一种方法.

## Revision 37 - 2009 年 11 月 7 日

增加: 支持 `obj[method_name](params)` 对象调用语法.

## Revision 36 - 2009 年 11 月 4 日

变更: 如果 `x.y` 或类似的语句紧跟着左中括号(`[`), 中括号与其右边最近的分隔符之间的部分被当作操作的第一个参数. 例如, `a.b.c[d]` 相当于 `ObjGet(a.b,"c",d)` 和 `x.y[z]:=v` 相当于 `ObjSet(x,"y",z,v)`. 在以前的版本中, 中括号前的每个子表达式是分别计算的.

变更: 如果方法调用, 例如, `x.y()` 紧跟着赋值, 小括号 "()" 视为中括号 "[]". 例如, `x.y(z):=v` 现在相当于 `ObjSet(x,"y",z,v)`.

修复: If(expr) 和 While(expr) 不需要空格或逗号来分割.

## Revision 35 - 2009 年 10 月 25 日

修复: 以两个或更多个 "." 开始的独立表达式, 例如, `x.y.z()`(被 L34 破坏). 还需注意 '(' 或 '[' 或 ':=' 仍然是需要的.

## Revision 34 - 2009 年 10 月 24 日

变更: 将对象中的值设置为空字符串现在存储空字符串, 而不是从对象中删除键-值对. _Remove 仍可用于完全删除键-值对.

变更: 命令名称必须以空格, 制表符或逗号终止. 下列字符不再绕过这一要求: `<>:+-*/!~&|^[]`. 换句话说, 例如 `MsgBox< foo` 和 `If!foo` 这样的语法错误现在能在加载时被捕获.

修复: 当表达式产生的变量包含对象时, Return 现在能正确的处理了. 例如, `Return x:=y`, `Return (x)`, `Return x,...` 以及类似的语句现在能正常工作了(`Return x` 已经能正常工作了).

修复: 多参数 get/set 没有正确地支持多个对象的元函数(例如, for `x` 和 `x[y]` 在 `x[y, z]` 表达式中).

修复: 串联对象赋值, 例如 `x[y]:=z` 在 `r:=x[y]:=z` 中不能产生数字或对象 - 被 L33 破坏.

修复: 如果 `x` 不包含 `y`, `x. _Remove(y)` 使脚本崩溃或移除错误的项目.

修复: `x. =y`, `if x.y=...` 和类似的语句. 这将影响其他表达式.

修复: 独立的三元表达式不再需要空格. 例如, `x? F(1) : F(2)` 现在是允许的.

调试器: 在脚本退出时, 释放对象后才断开调试器以便调试 __Delete 处理程序.

## Revision 33 - 2009 年 10 月 3 日

修复: 对于返回对象或纯数字的函数, 局部变量不会自动释放.

修复: 与三元运算符和 Object() 相关的两个两个独立的引用计数错误.

修复: 如果脚本的对象函数所返回的字符串直接分配给一个变量, 该变量的长度不能正确设置.

修复: 如果表达式中的最后一个操作从临时对象获取了字符串, 那么对象和字符串就会提前释放.

修复: 当通过变量从函数返回或传递给递归函数时, 不保留具有特殊格式的数字字符串.

修复: 如果表达式的最终结果(除了 Return) 是对象, 则正确地产生一个空字符串而, 不是静默地中止该线程.

修复: __Delete 元函数有时会覆盖 deref 缓冲区中的临时值.

增加: 通过 &object 获取的地址可以使用 Object(address) 转换回对象引用.

## Revision 32 - 2009 年 9 月 26 日

修复: 当指定少于三个参数时, Send/PostMessage 会崩溃的问题.

## Revision 31 - 2009 年 9 月 26 日

增加: 对象/数组的支持和许多微小的变化使这成为可能.

增加: 支持 While(expression) 之间没有空格.

增加: Trim, LTrim, RTrim.

增加: A ~= B; 等效于 RegExMatch(A, B). 可能在将来的修订版中删除.

修复: 与LowLevel 不兼容.

变更: [, ] 和 ? 字符在变量名称中不再有效. 因此, ?(三元运算) 不再需要两边的空格.

变更: 现在可以在非动态函数调用的参数列表中的任何位置省略可选参数. 由于这可以通过在加载时自动插入参数的默认值, 因此不支持或允许动态功能调用.

调试器: 各种微小的变更使程序流程容易遵守步进式调试代码.

优化: 如果 DllCall 的第一个参数是原义字符, 这标识函数已经存在于内存当中了, 那么此字符串会自动被解析为函数地址.

升级 从 v1.0.48.03 到 v1.0.48.04.

## Revision 30 - 2009 年 5 月 31 日

升级 从 v1.0.48.02 到 v1.0.48.03.

## Revision 29 - 2009 年 5 月 2 日

所有支持的图片格式可用于菜单图标. 当前在 Windows Vista 和更高版本中如果需要被设置的图标保留透明度时, 则必须指定 "真实的大小". 例如:

    Menu, Icon, MenuItemName, Filename.png,, 0

## Revision 28 - 2009 年 5 月 2 日

改进 通过执行二进制搜索函数名称查表来改进动态函数调用的平均性能. 这种变化也适用于其他领域, 例如加载时解析表达式中的函数引用和运行时解析 OnMessage, RegisterCallback 等.

## Revision 27 - 2009 年 4 月 26 日

升级 从 v1.0.48.00 到 v1.0.48.02.

## Revision 26 - 2009 年 4 月 11 日

修复: 如果 owner-drawing 正在使用中, 则菜单图标没有绘制在具有子菜单的项目上.

修复: 如果所有菜单项都被删除时菜单图标不会被释放.

变更(源代码): 重命名 AutoHotkey.sln 到 AutoHotkey_L.sln 使 VS 窗口被识别更容易.

## Revision 25 - 2009 年 3 月 30 日

修复: Send {U+xxxx} 正确的设置修饰键状态为普通热键.

修复: Send {U+..xx} 不再触发 hotkey SCxx.

## Revision 24 - 2009 年 3 月 30 日

增加: 支持 Send {U+xxxx}. SendInput() 在可用的情况下适当支持 Unicode, 否则回到 Alt+Numpad.

## Revision 23 - 2009 年 3 月 30 日

修复: GuiControl, Enable/Disable 现在只在焦点控件被禁用时重置焦点.

## Revision 22 - 2009 年 3 月 26 日

优化 If var [not] in/contains MatchList, 特别是对于包含较短字段的长列表.

## Revision 21 - 2009 年 3 月 16 日

优化 While. [感谢 Chris]

修复(调试器): 版本 19 和 20 从调用堆栈中忽略了计时器的线程.

修复(调试器): 在大多数情况下不转义 XML 的保留字符.

修复(调试器): 在退出脚本之前, 最终的响应中使用了不正确的命令和 transaction_id.

## Revision 20 - 2009 年 2 月 27 日

变更: 如果不能用新方法加载图标, 则返回旧方法.

## Revision 19 - 2009 年 2 月 26 日

增加: Gui, Font, qN 选项设置字体质量/控制的反锯齿效果, N 是从 0 到 5 之间的数字.

修复: IL_Add 在存在多个尺寸时现在加载最合适大小的图标.

与 AutoHotkey v1.0.48 合并, 引入 Chris 的 bug 修复, 优化和其他改动. AutoHotkey_L 特性被整合进主发行版; 下面列出变更和新特性:

- 传统的行为不再适用于 While - 例如 "While %x%" 正确解析为双重引用而不是 "While x".
- One-True-Brace 样式现在支持 While.
- 静态变量现在可以在假设静态函数中声明和初始化.
- 在动态函数调用中传递 太少 参数不在允许, 因为它允许函数的调用再次猜测函数的设计, 降低了在运行时检测脚本错误的能力, 并且如果调用内置函数, 可能导致应用程序崩溃.

## Revision 18 - 2009 年 2 月 21 日

修复: 在以前的版本中合并紧挨着的赋值, 不完整的错误修复导致在某些情况下跳过剩下的表达式 .

## Revision 17 - 2009 年 2 月 20 日

增加: 使用菜单命令中的 Icon 和 NoIcon 子命令来实现菜单的图标.

变更: 现在可以使用负图标号来指示可执行文件中的资源 ID.

变更: 将菜单的默认样式设置为包含 MNS_CHECKORBMP.

变更: 加载自定义托盘图标的小型和大型版本, 以允许在适当的地方显示正确的图标.

修复: 从可执行文件加载的图标大小不同于系统中的大小.

## Revision 16 - 2009 年 2 月 4 日

修复: 删除菜单项部分删除其相关子菜单.

## Revision 15 - 2009 年 2 月 1 日

修复: SetFormat 在*编译*脚本中存在不会禁用二进制数字写入缓存. SetFormat 现在应该在编译脚本中正常工作.

## Revision 14 - 2009 年 2 月 1 日

Chris 修复许多错误和优化(pre-v1.0.48 beta).

增加: 支持正则表达式和自动调出选项 'C'.

变更: A_AhkVersion 现在包括修订号. 例如, 这是 1.0.47.07.L14.

修复: HWND/window ID 扩展到 64 位. 例如, 0xb482057e 变为 0xffffffffb482057e.

## Revision 13 - 2008 年 11 月 29 日

修复: 无效的 DllCall 类型在某些构建环境中被视为 INT.

增加: 当禁用焦点控件变通方式解决 GuiEscape 问题.

变更 版本信息: 内部名称, 产品名称和文件描述(说明) 现在由 "AutoHotkey_L" 替代 "AutoHotkey".

## Revision 12 - 2008 年 9 月 6 日

修复: 在内置变量上使用 property_get 时可能存在访问冲突. -- DBGP

## Revision 11 - 2008 年 9 月 5 日

修复: 通过后期构建脚本从 AutoHotkeySC.bin 中删除校验和(AutoHotkey 必须安装).

增加: .L 后缀添加到 A_AhkVersion 中.

增加: 初步支持 DBGp(交互式调试).

## Revision 10 - 2008 年 8 月 2 日

修复: WheelLeft/WheelRight 支持, 在 revision 9 失效.

## Revision 9 - 2008 年 6 月 29 日

修复: 允许在 While 中使用 Break/Continue.

修复: 在非英语系统, TrayTip 的问题和使用 Vista 头带来的其他可能的副作用.

## Revision 8 - 2008 年 6 月 27 日

增加: #IfTimeout 指令设置用于评估 #If 表达式的超时值, 毫秒作为单位. 默认是 1000.

增加: 函数的假定静态模式. "静态变量" 必须先于任何局部/全局变量声明.

增加: One-true-brace 风格支持 While.

变更: While 现在设置 A_Index 在迭代的开始.

## Revision 7 - 2008 年 6 月 26 日

增加: IsFunc(FuncName) - 返回非零数字, 如果 FuncName 函数在脚本中存在或是内置函数.

## Revision 5 - 2008 年 6 月 19 日

清理 清理过时的对测试脚本的引用.

增加 基本的默认测试脚本.

## Revision 4 - 2008 年 6 月 18 日

增加: #if (表达式) - 类似 #IfWinActive, 但是适用于任意表达式.

增加: WheelLeft, WheelRight - 支持由 Windows Vista 开始引入的 WM_MOUSEHWHEEL.(需要 Vista.)

增加: While, 表达式 - 当条件为真时一直循环.

增加: A_IsPaused - 底层线程暂停时为真.

增加: A_IsCritical - 使用 "Critical" 命令标记当前线程为不间断运行时为真.

变更: 允许传递任意数字参数到动态函数.

修复: WinGetClass 和子窗口造成的非法访问.

修复: 空动态函数引用造成的非法访问.

dftg