# 变更 & 新功能

v1.1 到 v2.0 的更改涵盖了 v1.1 和 v2.0 之间的差异.

有关更改的全部技术细节, 请参阅 GitHub.

## 2.0.4 - 2023 年 7 月 3 日

更改 错误/警告对话框上的 Reload 按钮, 显式关闭对话框, 即使当前脚本实例没有终止.

删除 对 `return var` 的优化, 该优化导致在 `finally` 块中访问该变量时显示为空白.

修复 Default(Switch) 允许冒号前的空格.

修复 在 Length 通过 `unset` 或 `var?` "显式省略", Array.Prototype.RemoveAt 返回移除值.

修复 当 ComObject 传递给 for 循环时只指定第二个变量时的崩溃.

更改 合并 v1.1.37.00 和 v1.1.37.01 的变更:

修改 COM 方法和属性调用, 将大整数作为 VT_I8, 而不是 VT_R8(浮点) 传递, 因此保留了原来的类型和精度. 32 位范围内的整数仍作为 VT_I4 传递.

新增 对带有 IDispatch 包装的 AutoHotkey 对象的双变量枚举器(for-loops) 的支持. 调用对象的脚本和对象本身都必须运行在支持的 AutoHotkey 版本.

修复 通过 IDispatch(COM) 调用 AutoHotkey 方法时, 省略的参数接收其默认值, 而不是 "可选参数标记" 的问题. 在以前的版本中, 调用 COM 方法时, 已经完成了反向转换.

修复 `VerCompare(a, ">" b)`, 并略微减少了代码大小.

修复 AltTab-related 相关的加载时错误, 使之与其他错误一致.

修复 由 ComObject 包装器抛出的错误, 如果它是通过对象/COM 调用的, 不会被正确传播.

修复 热键 GUI 控件, 允许将符号 `^`, `!` 和 `+` 设置为热键.

修复 热键控件, 当其值被设置为一个符号时, 包括修饰符.

修复 InputHook.KeyOpt() 单字符的潜在错误行为.

- 删除选项可能不会影响相应的 SC.
- 选项可能也适用于 sc000.

修复 自定义组合的错误, 即如果单独用 #HotIf 禁用 `a::`, 一组热键如 `a & b::`, `a::` 和 `a up::` 将不能抑制 `a` 的释放.

修复 一个错误, 即一个键按下事件能被热键正确抑制, 但在 SendLevel > 0 的情况下, 发送一个额外的键按下, 会阻止随后的键松开被抑制, 即使由于 #InputLevel, 忽略发送的事件.

修复 `a & b up::` 在 `a & b::` 存在, 但被 #HotIf 禁用的情况下, 不会抑制 `b` 的问题.

修复 热键由于竞争状态而无法触发的问题. 如果修饰符热键(如 `~*RWin::`) 太早调用 Send 或 GetKeyState, 操作系统可能会报告 RWin 没有按下, 因此修饰符的钩子的状态将被 "纠正", 热键将错误地触发或无法触发. 只有当另一个键盘钩子比脚本自己的钩子安装得更晚时才可能发生这种情况, 因为在这种情况下,操作系统不会更新按键的状态, 直到另一个钩子的线程恢复并返回..

修复 热字串使用 #HotIf 设置的最后找到的窗口.

修复 任何尝试重新安装键盘或鼠标钩子的问题, 如果操作系统已自动卸载该钩子. 在进行任何此类尝试之前, 仍有必要满足某些条件.

优化 内置 IDispatch 缓存的 COM 属性名的分配.

重构 代码以支持 AutoHotkey 作为 DLL 的构建配置.

## 2.0.3 - 2023 年 6 月 19 日

修复 `Hotkey("a", "b")` 去使用原始的函数 "b", 而不是 "a". [PR #318]

修复 在文件读取循环中使用 FileSetAttribute 时崩溃的问题. [PR #323]

修复 重复 Gui 控件名称错误, 以正确中止线程.

修复 DateTime/MonthCal 范围选项不应用最小值.

修复 `s[x] => x` 和其他以 "s" 开头的单行属性.

修复 在包含 `=>` 的静态行中删除断点的错误.

修复 当点击时, Button 控件不成为默认.

修复 没有找到像素, PixelSearch 取消设置 X.

修复 带转义序列的热字串导致下一行被跳过.

修复 当 "ahk_" 在字符 2 时, WinTitle 忽略字符 1.

修复 重映射, 以利用右手修饰符已经按下. 例如, `+x::+y` 将不再释放 RShift 来按下 LShift.

更改 `a == b && c()` 和类似情况的错误消息, 以避免暗指传统的 `=`.

改进 某些情况下意外续行的错误信息.

修复 允许保留字作为方法名的问题, 如文档所示.

修复 一些键盘消息的重复 OnMessage 调用.

修复 过早删除互引用闭包的问题.

修复 SetFont 允许在 Options 参数中使用前导空格的问题.

修复 `{ASC nnnn}` 的发送.

修复 `a.base := a` 抛出错误的问题.

修复 `x.y := unset` 导致崩溃或未定义的行为.

修复 GuiControl.Move() 相对于 GUI 的客户端区域的问题，即使 GUI 不是它的父界面.

修复 Menu Add 覆盖由 Menu Insert 附加的项目.

Launcher

在没有参数的情况下运行, 运行 Dash, 而不是在文档中显示旧的欢迎页面.

修复 版本选择 GUI 在未选择版本的情况下按 Enter 键时引发错误的问题. [PR UX/#4]

检查版本不存在是否可以下载时, 抑制错误.

修复 如果 UAC 被禁用, 没有版本下载提示, 不显示 UAC 屏蔽的问题.

修复 #Requires 解释的问题.

- 支持省略 "v" 前缀.
- 支持运算符(`> >= < <= =`).
- 版本号支持单独的数字.

Installation

修复 命令行使用的默认安装目录.

重命名 开始菜单快捷方式 "AutoHotkey" 为 "AutoHotkey Dash".

修复 当以 SYSTEM 运行时的 EnableUIAccess.

修复 在选择证书时验证私钥的 EnableUIAccess.

Dash

修复 启动配置 GUI 更新 "以管理员身份运行" 和 "以UI访问运行" 选项.

修复 启动配置 GUI 中的 Up/Down 键的处理.

## 2.0.2 - 2023 年 1 月 2 日

修复 短 DllCall 参数类型和无效类型的未定义行为.

修复 AutoHotkey 二进制文件的(非字符串) 版本号.

修复 参数类型错误以显示正确的参数编号.

## 2.0.1 - 2023 年 1 月 1 日

修复 Func.IsOptional(1) 在某些情况下, 错误的返回 0 的问题.

修复 当 Gui 是自己的事件接收器时, Gui 事件处理函数不删除 Gui 参数.

修复 当没有可用的描述时, COM 错误不显示 "(null)".

修复 ToolTip 间歇性出现在错误的位置.

修复 __Enum(unset) 允许数组, 匹配和 Gui 的第二个变量.

修复 #include <> 错误消息显示 "Script library" 而不是 "Function library" 的问题.

修复 带有 Critical 的新线程无法阻止消息检查的问题.

优化 DllCall 类型名称的转换.

优化 代码.

## 预发布

有关 v2.0.0 版本之前的更改历史, 请参阅以下内容(但注意一些更改已被取代):

- v2.0 候选版本
- v2.0-beta 版本
- v2.0-alpha 版本

dftg