下面列出了 AutoHotkey v1.1 开发分支(旧称为 AutoHotkey_L) 变更和新增功能介绍.
对于较旧的变更, 请参阅存档变更.
修复 LWin::Alt
无法用于激活某些 Alt-组合键的问题.
修复 鼠标 AltTab 热键不抑制前缀热键的执行, 例如 1::
对于 1 & WheelDown::AltTab
. (由 v1.1.37.00 引入)
修复 钩子热键不能识别由 SendInput 按下的修饰符的问题.
修复 一些影响 Alt/Ctrl/Shift/Win 热键被抑制的问题, 例如:
*LCtrl::
从活动窗口阻止 LCtrl, 但发送 Alt 组合键会失败, 因为系统认为 Ctrl 键已按下, 因此会发送 WM_KEYDOWN 而不是 WM_SYSKEYDOWN.*LAlt::
会导致系统忘记任何先前的 {LAlt DownR}
, 因此当 LAlt 被物理按下时, 即使 LAlt 被抑制, LCtrl::LAlt
这样的重映射也无法正常运行.修复 A_Clipboard 忽略纯数值赋值的问题.
修复 SendInput 在释放 RAlt 后释放 LCtrl 失败的问题(如果它不是 AltGr).
修复 新线程无法阻止消息检查的问题 with Critical.
修复 热键由于竞争状态而无法触发的问题. 如果修饰符热键(如 ~*RWin::
) 太早调用 Send 或 GetKeyState, 操作系统可能会报告 RWin 没有按下, 因此修饰符的钩子的状态将被 "纠正", 热键将错误地触发或无法触发. 只有当另一个键盘钩子比脚本自己的钩子安装得更晚时才可能发生这种情况, 因为在这种情况下,操作系统不会更新按键的状态, 直到另一个钩子的线程恢复并返回.
修复 热字串使用 #If 设置的最后找到的窗口.
修复 MouseGetPos, ControlClick, ContextMenu Gui 事件和 DropFile Gui 事件错误地检测到位于控件下方或右侧一个像素的特定点的控件.
修复 任何尝试重新安装键盘或鼠标钩子的问题, 如果操作系统已自动卸载该钩子. 在进行任何此类尝试之前, 仍有必要满足某些条件.
修改 COM 方法和属性调用, 将大整数作为 VT_I8, 而不是 VT_R8(浮点) 传递, 因此保留了原来的类型和精度. 32 位范围内的整数仍作为 VT_I4 传递.
新增 对带有 IDispatch 包装的 AutoHotkey 对象的双变量枚举器(for-loops) 的支持. 调用对象的脚本和对象本身都必须运行在支持的 AutoHotkey 版本.
新增 在传入的 COM 调用中, 对 ByRef VARIANT 的支持. 脚本不会收到具有 VT_BYREF|VT_VARIANT 变体类型的 ComObject 包装器, 而是收到一个与普通 ByRef 参数兼容的临时变量.
修复 通过 IDispatch(COM) 调用 AutoHotkey 方法时, 省略的参数接收其默认值, 而不是 "可选参数标记" 的问题. 在以前的版本中, 调用 COM 方法时, 已经完成了反向转换.
修复 VerCompare(a, ">" b)
, 并略微减少了代码大小.
修复 AltTab 相关的加载时错误, 使之与其他错误一致.
修复 由 ComObject 包装器抛出的错误, 如果它是通过对象/COM 调用的, 不会被正确传播.
修复 热键 GUI 控件, 允许将符号 ^
, !
和 +
设置为热键.
修复 热键控件, 当其值被设置为一个符号时, 包括修饰符.
修复 Menu Add 覆盖由 Menu Insert 附加的项目.
修复 InputHook.KeyOpt() 单字符的潜在错误行为.
修复 自定义组合的错误, 即如果单独用 #If 禁用 a::
, 一组热键如 a & b::
, a::
和 a up::
将不能抑制 a 的释放.
修复 一个错误, 即一个键按下事件能被热键正确抑制, 但在 SendLevel > 0 的情况下, 发送一个额外的键按下, 会阻止随后的键松开被抑制, 即使由于 #InputLevel, 忽略发送的事件.
修复 a & b up::
在 a & b::
存在, 但被 #If 禁用的情况下, 不会抑制 b 的问题.
优化 COM 内置 IDispatch 的属性名缓存的分配.
重构 代码以支持 AutoHotkey 作为 DLL 的构建配置.
改进 ComObjConnect() 允许通过 __Delete 检测断开连接.
修复 命令参数超过 4*1024*1024 个字符时的性能问题.
修复 FileCreateDir 与网络共享/UNC 路径的问题.
修复 File.Length/Read() 与控制台缓冲未定义的行为.
修复 Switch 数值比较的未定义行为.
新增 VerCompare().
新增 通过 DBGp 支持断点异常.
扩展 #Requires 支持范围检查的操作符(<
<=
>
>=
=
) 和其他关键字: Unicode
, ANSI
, 32-bit
, 64-bit
.
新增 CompanyName 到 AutoHotkey.exe 的版本信息, 这可能会解决 Windows 10 的一个 bug, 该程序不会出现在打开方式中.
更改 Switch/Case, 当 switch 或 case 表达式是一个单独的原义字符串(如 "00"
) 时, 执行非数字比较, 并记录了以前没有记录的比较行为.
修复 一些与整数属性名称不一致的问题, 通过 IDispatch.
修复 使用 ComObjConnect() 后通过 DBGp 检查 ComObject 时潜在的崩溃.
修复 FileAppend 将空白 Encoding 处理为省略的问题.
修正 版本比较忽略数字构建信息; 例如 1.1.35.00+1+abcdef(1 是从 1.1.35.00 以来提交的数量).
修正 FileCreateDir X\Y\
(带有尾斜杠) 创建 X 失败的问题[由 v1.1.35.00 引入].
变更 GroupActivate 和 GroupClose, 使其行为更为直观:
jeeswg 的贡献(拉取请求 #186, #235, #240, #249, #273, #274):
修复 #Warn 未达消息中的一个拼写错误.
修复 FileCreateDir 对包含 ".." 或 "/" 路径的处理.
修复 FileSelectFile 的 RootDir\Filename 参数的一些问题:
修复 FileSetTime 在找不到文件时设置 A_LastError 的问题.
修复 EnvAdd/+= 增加 115,292,150,461+ 秒时, 会失去精度.
修复 键盘钩子在按下 Enter 键时, 重新插入被抑制的死键的问题, 例如在 `o{Enter}
序列中, 当以下为真时:
:?*:ò::
而抑制 "ò".修复 当目标为 32 位时, ControlGet List "Selected" 在 x64 上重复输出.
修复 ControlGet List "Count" 选项的堆栈损坏.
修复 回调函数不包含在调试器的调用堆栈中.
修复 如果 MsgBox 超时显示在启动后 100 ms 内, 会报告为 "OK".
修复 当 +ReadOnly
生效时, Edit 控件忽略 +WantTab
.
修复 当 -d
应该阻止它, property_get 返回一个局部变量 .
修复 RegRead 支持包含空项的 REG_MULTI_SZ 值.
修复 x[,y]:=z
调用未定义的行为.
修复 热字符串中 Unicode 补充字符的两次回删.
修复 如果 a up::
和 a & b::
存在, a::
不会触发.
修复 MinSize/MaxSize 在第一次调用 Gui Show 之前应用不正确.
修复 如果 InputHook 在停止后过早重启, 钩子线程会陷入无限循环的问题.
修复 崩溃或未定义的行为时, 一个空白参数被传递到 FileCopy, FileMove, FileCopyDir, FileMoveDir 或 FileRemoveDir.
修复 死键被键盘钩子在热字符串的最后一个字符被抑制后错误地重新应用(例如, 对于 :?*:ò::ó
).
修复 由 v1.1.34.00 引入的 bug:
Alt::
, Ctrl::
和 Shift::
的行为像普通的键, 而不是如文档记录的触发或释放.~a & b::
(当使用 #If 禁用时) 导致 a::
在 key-up 时触发, 甚至在激活一些其他组合键之后.修正了 v1.1.34.00 版引入的错误:
a up::
是第一个热键且 ~a & b::
存在, 则其在按下时触发, 而不是释放时.~a & b::
存在, a::
不会被抑制, 除非 a::
是第一个热键.CapsLock & x::
存在时, CapsLock::
不工作, NumLock 和 ScrollLock 同样如此.新增 使用 AutoHotkey.exe 作为编译脚本基础的功能, 允许编译的脚本在通过 /script
命令行开关时执行外部文件.
新增 在每个脚本顶部隐含包含代码的功能, 通过在 AutoHotkey.exe 中嵌入资源或使用 /include 命令行开关.
在未编译的脚本中启用菜单 NoMainWindow/MainWindow.
更改 ~x & y::
当 #If 禁用时不影响对 x 的抑制.
增强 FileCopyDir 以便在操作系统支持的情况下, 允许源目录是一个 zip 文件, 在这种情况下, 其内容会被提取出来.
修复 在同一滴答中执行多个一次性运行计时器[由 v1.1.33.11 破坏].
修复 ToolTip 定位/大小的错误.
A_ScreenDPI/96
倍; 现在已经考虑到这一点.优化 用于文本没有变化的情况下的工具提示, 以减少闪烁并加快其速度.
修复 如果在按下键之后(而不是之前) 打开热键, 并且该键也是带有波浪号的自定义前缀键(例如 激活 ~a & b::
干扰了 a up
), 则热键无法执行.
修复 自定义组合热键的前缀键导致钩子重置, 如 ~RButton & WheelUp::
当 RButton::
启用或禁用脚本的唯一键盘钩子热键时.
修复 Format(n)
返回空白, 当 n
为纯数字表达式.
修复 调试器无法查询 obj.<base>.<base>
.
更改 调试器的步进/断点滑过 Try/Catch/Finally/Case.
修复 Switch {
错误引发加载时错误.
修复 调试器 stack_get 在 OnError 后报告错误行.
修复 调试器 stack_get 报告自动执行线程的错误行.
修复 自动环境检索和 A_ComVar 安全允许大于官方限制的变量的问题 [PR #259 from mikeblas].
修复 鼠标滚轮热键的 A_EventInfo [broken by v1.1.33.05].
修复 ControlClick 无法正确转换滚轮消息坐标.
修复 AutoHotkey 对象的 IDispatch 实现为属性名保留大小写的问题.
修复 #Warn StdOut 默认为代码页 0, 当 /ErrorStdOut 未使用时.
修复 计时器的 __delete() 元函数删除下一个计时器时崩溃的问题.
修复 加载已经打开的 JPG/GIF 文件的问题.
修复 if-var-is 对 digits/xdigits 的错误识别.
新增 ControlGet Selected 的安全检查, 以防它被用于非 Edit 控件.
修复 变量在某些罕见情况下被设置为 NULL , 导致崩溃的问题. 唯一被证实的情况是, 当 AutoHotkey 作为 Windows 商店应用程序运行时, 一个超过 63 个字符的字符串从一个函数返回并被分配到一个变量.
修复 InputHook 回调在输入停止和重新启动后失败的问题.
修复 当 AltTab 动作被用于 key-up/down 对时的加载崩溃问题.
修复 主脚本文件无法打开时的垃圾错误文本.
删除 在读取第一行之前出现的错误信息中的 "Error at line 0".
修复 当最小化的 GUI 被恢复时焦点重置的问题.
修复 在使用 Gui Show 将 GUI 最小化时焦点无法保存的问题.
修复 非零 SendLevel 事件在 v1.1.33.07 版修正中未涵盖的情况下被错误地抑制:
修复 屏幕 DPI 变化后托盘图标冻结和变得模糊的问题.
修复 由 #InputLevel 错误的抑制按键而禁用热键的问题.
修复 由 v1.1.33.05 版本引入的一个错误, 即某些热键被忽略. 这包括操纵杆热键和所有应用了 #MaxThreadsBuffer 或 B 选项的热键.
修复 热键变体有不同 #InputLevels 的错误.
修复 Ctrl/Shift/Alt(没有 L/R) 作为钩子热键的问题.
删除了对 POPCNT 指令的依赖性, 老式 CPU 不支持该指令(例如 Core 2).
修复 当空的 SafeArray 被枚举时会崩溃的问题.
修复 Button/CheckBox/Radio 使用 -Wrap 时高度不自动展开.
修复 WM_DESTROY 绕过释放全局/静态变量中的对象的问题.
修复 WinMenuSelectItem 二次尝试匹配能正确的处理 &. 具体而言, 有实际文本的项目, 如 "a && b" 显示为 "a & b" 现在将匹配 "a & b" 而不是 "a b".
修复 在 Case/Default 行的断点中断在前一个案例的结束处.
变更 SoundBeep, 如果持续时间为负值, 则忽略持续时间, 而不是将其转换为一个大的正值.
修复 带有 ! 的鼠标热键在重复按键时掩饰 Alt-up, 如果可能.
修复 几个热键重叠的问题.
<^a up
触发 RCtrl+A, 因为它与 ^a
配对; 或 *^c up
触发 Shift+C, 因为它与 *+c
配对, 两者都可以触发 Ctrl+Shift+C.修复 InputHook.EndKey 以优先 vk 于 sc000.
修复 InputHook.KeyOpt("{sc000}", flags)
.
修复 #Warn Unreachable 标记 Case/Default 为不可达.
修复 修饰键-松开热键, 如 LShift up::
不抑制按键-松开, 除非定义了相应的按键-按下热键.
修复 DLL/EXE 中加载的图标, 如果它在图标组中排在第一位, 则不使用最接近的匹配尺寸[被 v1.1.33.00 破坏].
修复 如果定义了 a::
但没有定义 b & a::
, 则错误地将 a up::
优先于 b & a up::
. .
修复 b & a up::
不抑制 a
, 当 a::
已定义但被 #If 禁用, 且 b & a::
未定义时.
增加 #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 的问题.
更改 带有 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 支持代码, 并执行其他维护.
修复 Switch %v%
, Case %v%
和 Throw %v%
.
修复 Case 2,,:
以显示错误消息而不是崩溃.
修复 AltTab 热键 [被 v1.1.31.00 破坏].
修复 热字串 X 选项允许 ::
后出现空白的问题.
修复 单行热键禁止多行语句, 如 IF.
增加 Switch.
增加 InputHook.
增加 Locale
选项以使 InputBox 使用特定的本地按钮名称. [PR #143 from Ragnar-F]
优化 对长路径的支持.
常规热键优化:
#If
中的 <^a
和 ^a
. 如果 #If 禁用了热键的所有变体, 则可能触发更常规的热键. 换句话说, 用 #If 禁用热键现在应该更像是关闭它们或从脚本中删除它们.AltGr 错误修复:
Send xy
(x 需要 AltGr) 后, 热键不触发的问题.Send x
(x 需要 AltGr) 后, 发送不必要的 LCtrl.Shift-numpad 错误修复:
Numpad1::Send +1
这样的热键间歇性问题.修复 Slider(滑块) +TickInterval
生效, 尽管如果 Range
没有设置.
修复 滑块 +TickInterval0
设置间隔为 0, 禁止刻度.
修复 在某些情况下, 菜单和 Gui 事件导致的 CPU-maxing 循环. 具体来说, 当模式消息循环正在运行且脚本不可中断时, 菜单和 Gui 事件会被反复重新发布. 这些现在被丢弃, 因为它们不能被处理或保存在队列中. 这与热键等是一致的.
修复 DllCall 严重错误时总是退出, 忽略 OnExit 结果.
修复 ExitApp 2
在全局/静态变量中绕过对象的释放.
变更 ComObjCreate() 对非-GUID 字符串使用 CLSIDFromProgID. 这修复了 ComObjCreate("Microsoft.Windows.ActCtx")
和其他可能不在注册表中但可以工作 VBScript 和 JScript 的代码.
修复 调试器 context_get 触发 #Warn UseUnset 的问题.
修复 直接修饰符热键如 Shift:: (由 v1.1.30.02 破坏).
修复 菜单重命名以允许重复和无操作/仅大小写改变的重命名 .
修复 Hotstring() 的 X 选项. [来自 Helgef 的 PR #132]
修复 __init/__delete 造成的错误的行/堆栈跟踪.
修复 #if 表达式在 Sleep 和类似情形下的停滞问题.
修复 自定义组合热键在本身挂起后不正确触发的问题.
更改 TV_Add/TV_Modify 以允许 "Bold1" 和 "Bold0".
修复 热键对带有非零 #InputLevel 时, 阻止 sent 事件.
修复 Control Choose
发送 WM_COMMAND, 即使控件的 ID 为 0.
修复 脚本使用键盘钩子但没有热键时的堆积错误.
修复 带有 'X' 选项的单行热字串中的转义序列.
修复 在 ;
注释符号之前的 ``
转义序列.
修复 finally
破坏待处理 return
的值.
修复 MsgBox 检测超时, 即使线程被中断.
修复 Ahk2Exe 在 #Include 中支持更多的内置变量.
修复 SendInput/SendPlay 以恢复 DownR/remapped 修饰键.
增加 每个脚本的热键数量限制, 从 1000 提高到 32762.
变更 接受 On/Off/Toggle 的命令, 也接受 1/0/-1(在文档中已列出).
改进 调试器(DBGp) 的支持:
修复 WinMove 在某些情况下会导致程序崩溃的问题[由 v1.1.29.00 破坏].
修复 Gui x:Default
如果没有 Gui 被创建[由 v1.1.29.00 破坏].
增加 Object.Count()
和 ObjCount(Object)
.
增加 ObjGetBase(Object)
和 ObjSetBase(Object, Base)
.
增加 ObjRawGet(Object, Key)
.
增加 OnError(Function [, AddRemove])
.
改进的异常处理:
移除 每个按键可使用的自定义修饰符数量的限制.
变更 Send {Text}
以避免切换 CapsLock 或等待 Win+L.
修复 #Warn ClassOverwrite 不对 A_Args 进行警告.
改进 DBGp 源
命令, 以便在文件代码页和 UTF-8 之间进行正确转换, 并减少代码大小.
其他代码大小优化和琐碎的维护.
修复 Control ChooseString
和 ControlGet FindString
忽略前两个项目.
修复 Control ChooseString
去发送 WM_COMMAND, 尽管控件的 ID 为 0.
修复 WinActivate 还原活动窗口, 如原来 [v1.1.20.00] 所预期的哪样.
修复 线程处理省略参数为 0.
修复 FileAppend 到 stderr (**).
修复 break label
可以跳转到一个不相关的循环.
恢复 热字串重置行为到 v1.1.28.00 之前的版本.
新增 Hotstring("Reset")
以手动重置热字串识别器.
变更:
0&
作为窗口的系统菜单.新特性:
Bug 修复:
x up::y
重映射错误误导附近的行.Menu Tray, Icon, HICON:%hicon%
, 现在使用 hicon 而不用调整它的大小.修复 Gui 带有 +Parent 时, 其默认尺寸不受父窗口限制 [被 v1.1.27.05 破坏].
修复 如果在控件失效后, 立即显示/隐藏单独的 Tab(选项卡) 控件, 控件不会重绘的问题(比如, 同时显示/隐藏多个控件).
修复 热字串/Input 导致的无用键(dead keys) 卡死(被 v1.1.27.05 破坏).
修复 可见的 Input 结束键导致任何挂起的无用键两次松开.
修复 热字串/Input 影响 Tab/Esc 在无用键序列中的作用.
修复 如果使用 DLL, A_IconFile 返回错误的路径.
修复 Gui 带有 +Parent 时, 相对于父窗口居中而不是屏幕.
修复 通用 Windows 平台(UWP) 应用程序中 Input/热字串对无用键序列的检测.
修复 < & v
和 > & v
被视为重复, 以及类似的情况. 这会影响自定义组合其中前缀键也是修饰符符号. 这也修复了仅包含修饰符符号和单个尾部空格, 例如 + ::
的热键, 将其视为错误而不是忽略空格(热键不允许尾随空格).
修复 #Warn ClassOverwrite 发出错误警告.
改进 Menu x, NoStandard
和 Menu x, DeleteAll
的工作方式, 而不试图破坏底层的 Win32 菜单. 当 x 是一个菜单栏或子菜单时, 允许他们可以正常工作.
重写了 vkXXscYYY
的处理方式:
修正 在 64 位版本的某些特殊情况下对 32 位范围以外的数字键(但在 64 位范围内) 的错误处理. 这只影响使用诸如以数字为名称的类(不推荐使用出于多种原因) 和通过以数字作为键/成员名称的 IDispatch 的数组访问.
修复 以原始的尺寸加载 bmp 文件作为图标的问题.
修复 复合赋值如 Test.Prop[1] += 1
(被 v1.1.27.01 破坏).
修复 在缺少 #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 破坏).
变更:
替换 AU3_Spy.exe 为 WindowSpy.ahk.
变更 当键盘布局中不存在该字符时, a-z 表示为 vk41-vk5A, Raw 模式或发送单个未修改字符时除外. 这允许热键和发送键盘快捷键在某些非英语键盘布局中更加直观的工作.
变更 在 ANSI 版本中, 对于特殊字符, Send 命令使用 SendInput() 代替 Alt+nnnnn.
变更 在按下钩子热键时, 菜单(Alt/Win) 掩饰键的规则:
AppsKey::RWin
, 但为了激活开始菜单的热键可能需要新的变通办法.#a::
, 而不是 *a::
) 时, 才引发掩饰键. 这是允许重映射或通配符热键发送 key-up 不被掩饰.~#a::
不再引发掩饰键, 因为原生的 keydown/keyup 足以阻止菜单. 但是, 鼠标热键像 ~*MButton::
结合 Win 键, 不再阻止开始菜单. 它可以通过发送 Send {Blind}{vk07}
或类似的方式手动阻止.热键 ~LWin::
和 ~RWin::
不再屏蔽开始菜单(译者注: 旧版的屏蔽效果也不是很好). 有关详细信息和解决方法, 请参阅 #MenuMaskKey.
增加 vk 或 sc 键名增加适当的验证, 所以名称, 如 "sc01notvalid" 不再被识别为按键.
脚本中含有形如 VKnnSCnnn::
热键的将需要通过删除 SCnnn
来加以修正, 在之前的版本中是被忽略的.
帮助文件: 使用由 Ragnar-F 开发的新 HTML5 边栏替换标准 HTML 帮助查看器边栏.
新特性:
AppsKey::RWin
和类似的问题.Bug 修复:
ControlSend {u n}
, 其中 u 是 Unicode, 发送 n 次, 而不仅仅是 1 次.RAlt::
再次导致系统在 Windows 10 中 "释放" LCtrl, 就像在 v1.1.26.01 之前一样(但不像那些旧版本, 它阻止了 RAlt-up 到达活动窗口). 这种更改不会影响没有 AltGr 的键盘布局.Menu Tray, Icon
, SB_SetIcon 和 LoadPicture 使用非零 Icon 选项时, 允许位图(但如果需要转换时, 将会进行转换).sc
或 vk
开头的表达式的单行热键.>
/<
热键修饰符错误地允许按下两个键. 例如, <^A
可能被 LCtrl+RCtrl+A 错误触发, 从而阻止了 <>^A
热键的工作.{Raw}
并且未使用 O, R 和 * 选项时).Send !^+#{key}
或发送 Unicode 字符引起的修饰符变化. 在 SendLevel 0 时, 这会恢复 Send 到 v1.1.06 之前的状态, 但在 SendLevel >= 1 时, 保持 v1.1.06 + 的行为, 允许 Send 触发正确的热键.^m::Send x
第一次被调用时, 恢复修饰符状态的几率进行改进. 这样就不太可能在第一次按住时产生不同的(意外的) 结果, 如 xmmm 而不是 xxxx.修复 当 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 记录额外的行, 以显示它仍在等待, 也就是说, 在中断处恢复后才记录其他行.
变更 ListVars 的格式用于显示包含对象的变量. 对象的类名现在可以显示了.
增加 "class" 和 "clsid" 方法到 ComObjType().
改进 调试器中类名的显示, 并在此过程中显著缩减代码的大小.
改进 FileSetAttrib, FileSetTime 和 FileDelete 以缩减代码大小. 对于这些命令的使用应该没有任何变动.
对代码大小进行其他较小的优化.
修复 GetKeySC() 对于 Esc, Escape, ScrollLock 和 PrintScreen 键的使用.
修复 热字串是否包含非间距标记, 例如阿拉伯语变音符号.
修复 如果错误产生时 GUI 选项字符串被永久的缩短.
修复 子变量的属性和类使用非 ASCII 字符.
修复 new
操作, 使用 __New 用于抛出或退出.
修复 Send 在特殊字符的前面, 脚本作用于修饰键状态的改变, 例如 Shift 的释放在 Send Mört
.
增加 Hotkey, If, % FunctionObject(函数对象).
修复 帮助菜单中打开的网址.
修复 WinSet AlwaysOnTop/Trans/TransColor 在扩展样式值为 0 时能正常使用.
修复 File.ReadNum()
重复旧的数据, 如果先前 File.Read()
在缓冲区的末端停止读取.
优化 缓存的利用在 File.Read()
到达缓冲数据的结尾时.
修复 GuiControl +Password
在 XP 及以后系统中使用默认的子弹字符.
修复 GuiControl +/-Password
立即重绘控件.
修复 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 规范.
增加 Run with UI Access(以 UI Access 运行) 选项在安装界面中.
增加 Tab3 autosizing 文档.
修复 系列 Tab3 的 bug:
AutoSize
或 w
和 h
选项, 第一次调用 Gui Show 不会触发自动调整.修复 OnMessage() 传递 lParam 作为无符号的 32 位.
修复 Gui Name :
冒号前面允许空格.
修复 由负值的 HWND 来识别 Gui 或 GuiControl.
修复 ComObject 抑制脚本释放对象后由事件断开引起的任何错误.
修复 如果界面有一个多行菜单栏, Gui Show(界面的显示) 导致窗口缩小.
修复 LV_InsertCol(n, width)
在某些操作系统中, ListView 滚动条不会更新的问题.
优化 FileRecycleEmpty 的代码大小.
变更 Hotkey, If, Expression
如果未使用的第三个参数不为空时, 会引发错误.
修复 &&
, ||
和三元运算释放任何用作条件的对象, 例如 if (a.subObject && b)
.
修复 Gui/GuiControl 在 Tab3 控件中选中 radio 按钮失败的问题.
修复 FileCreateShortcut 允许在 Windows 10 中 LinkFile 参数为相对路径.
修复 Tab3 控件主题不覆盖其控件的自定义文本颜色.
修复 在某些具体情况下调试器继续命令处理不正确.
破坏性变更:
传递计时器的 标签 参数是空变量或返回空值的表达式被看做一个错误. 这个参数必须为非空的值或完全忽略.
运行一次的计时器如果与脚本创建的对象相关联, 则会在运行后自动删除. 这允许在脚本不再引用它的情况下释放对象, 但这也表示计时器的 Period 和 Priority 不再保留.
SetTimer, Hotkey, GuiControl 和 Menu 现在检查由参考给出的函数的最小参数计数(不像以前的版本). 如果该功能需要太多参数, 会引发错误或设置 ErrorLevel(视情况而定).
向后兼容的改变:
如果计时器的标签 参数被省略且 A_ThisLabel 为空, 则使用当前的计时器(如果有的话).
新特性:
增加 Tab3 控件类型, 解决若干 Tab 控件的问题.
Bug 修复:
修复 GuiControl 在添加/删除 选项卡时更新控件. 特别是:
||
来选择新选项卡现在工作正常.修复 +Disabled
/+Hidden
在选项卡中的控件上失去效果.
修复 禁用选项卡控件以忽略 Ctrl + Tab.
修复 Gui Tab
没有参数, 可以开始新的 radio 按钮组(如果适用). Gui Tab
带有参数, 已经有了这个效果.
修复 Menu x, Insert, y, z, % object
使用对象.
修复 Menu x, Add, :item text, % object
子菜单使用对象.
修复 break label
直接内嵌到它的目标循环中导致程序崩溃的问题.
修复 InputBox, MsgBox, FileSelectFile 和 FileSelectFolder 命令在当 Alt 键被按下时会发送一个非预期的 Alt-up 出来. 这是由于在 v1.1.22.01 版本处理 Ctrl/Shift 时的错误导致的.
改进 Ctrl/Shift 的工作方式, 以避免在同时按下 Ctrl, Shift 或 Alt 键时不必要的掩盖了 Win 键.
修复 LV_Modify 以支持被忽略的参数, 如 LV_Modify(r,, col1)
.
修复 __Delete 元函数如果在异常传递过程中被调用时, 错误的不抛出或重复抛出异常.
修复 当必须参数为空时函数调用的载入时侦测问题, 如 fn(x,,y)
.
修复 RegDelete 删除整个键值而非默认值.
代码维护;一些代码体积的精简, 提升.
修复 理论上可能存在从畸形或太长的路径中无法载入脚本的问题.
Ahk2Exe: 修复已编译脚本中的 Unicode 编码问题(v1.1.23.00 版本引入).
增加 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.
修复 SetTimer Delete 的一些问题.
修复 For 循环在 _NewEnum/Next 抛出异常时仍可以正确传递控制.
修复 Finally 命令在其执行体执行完成后才暂停延迟异常而不是仅当遇到首个内建函数调用时.
修复 对于来自 Finally 代码段的不可用跳转的载入时侦测(v1.1.20 引入此 BUG).
修复 当 DPI 缩放为 150+%且 Gui 没有使用 -DPIScale
参数, Gui 控件中的 w-1
和 h-1
选项失效问题.
修复 ~key up
热键没有自动 Send {key down}
. 仅当热键在该键被按下后才被启用的时候会发生此问题.
修复 输入和热字串捕获 Unicode 和 无标记字符编码 事件.
修复 Edit 控件中如果最后一行为空行也进行自动伸缩大小.
修复 可响应 ComObj 函数的 内存不足 问题.
修复 ComObjArray() 直接忽略多余的参数而不会崩溃(仅适用于动态调用).
修复 GuiControl 以 "追加" 的形式修改 Tabs 控件(而不是原来的直接替换, 见 GuiControl 中的 Tab 说明).
修复 XP64 支持.
修复 优化无数字 ID 的图标加载.
修复 当 Gui 销毁时, 对于 +g 选项的函数对象不会主动释放资源.
修复 Gui Show 显示主 Gui 时避免强制激活子 GUI.
修复 当 Caps/Num/ScrollLock 按键按下时状态设置失败.
修复 Gui 颜色影响文本的颜色(一般为黑色).
修改 提高当 Gui Show 时 GuiSize 立即执行的成功几率.
对于开发人员:
修正 ObjRawSet() 不返回内容.
添加 Windows 10 supportedOS 标签到执行程序的 manifest(避免一些兼容性问题).
添加 检测函数声明中 ")" 之后的语法错误的检测.
修正 A_EndChar 在 Unicode 结尾字符中返回截断值的情况.
小变更:
修正 TreeView 对于未知消息不提交 *
事件.
修正 计时器删除本身时出现的崩溃或坏的表现.
修正 RWin-up 被屏蔽在某些罕见的情况下, 而 LWin-up 不会.
修正 Text/Edit/Button 控件调整大小来弥补字符溢出.
修正 注册表命令允许在子键中使用 :
当与根键合并.
修正 热键优先顺序.
重构 else/try/catch/finally 来支持 hotkey::try cmd
.
添加 一个脚本对话框的解决方案就像 Ctrl 或 Shift 在键盘钩子被锁后按下的情况.
添加 SetErrorMode(SEM_FAILCRITICALERRORS) 在程序启动时抑制系统级错误消息, 例如 "驱动器中没有磁盘". 调用 Drive 或 DriveGet 不再影响进程的错误模式.
变更 MonthCal 控件默认拥有 tab-stop 在 Vista 或更高系统中.
改进 ComObjConnect() 使用 IProvideClassInfo, 如果可用.
修正 了方法, 属性定义和括号在同一行结束出现的一些问题.
修正 Text/Link 控件自动调整大小在 +Border(WS_BORDER) 样式情况下.
修正 Break N
当 loop 直接跟在 If/Else/Try/Catch 后面的情况.
修正 属性和方法之间的命名冲突检测.
修正 OnMessage(msg, fnobj, 0)
不做任何事如果 fnobj 没有被注册.
修正 StrReplace() 允许 ReplaceText 被省略.
修正 类变量名使用非 ASCII 命名.
添加 Loop, Reg, RootKey[\Key, Mode].
添加 Loop, Files, FilePattern [, Mode].
变更 InputVar 参数允许 % 表达式(除了 if 命令).
修订 对象方法:
添加 Ord() 和更新 Chr() 来支持补充字符(>0xFFFF).
添加 StrReplace().
移除 RegRead 中为了兼容 AutoIt v2 而使用的 5 参数模式, 这些已不再支持(额外的参数是未使用的).
变更 RegRead, RegWrite 和 RegDelete 根键和子键参数可以随意组合.
修正 MouseGetPos (OutputVarControl), GuiContextMenu, GuiDropFiles (A_GuiControl) 忽略被禁用的控件的问题[被 v1.1.20.00 破坏].
修正 OnMessage() 的 add-first 模式.
修正 A_OSVersion 未知的 x64 版本操作系统.
修正 ExitApp 来取消暂停脚本在释放对象前以防 __delete 元功能已调用.
琐碎的优化和代码维护.
由于在线程中断中的保存和恢复 ErrorLevel 上意想不到的后果, 恢复 v1.1.20.00 所做的更改.
修正 计时器有时会导致 ErrorLevel 会被格式化成十六进制值.
修正 类方法保留类的计数引用.
新特性:
增强 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 的获取方法.
变更 A_OSVersion 使用 RtlGetVersion() 来获取 win10 及未来版本.
变更 A_OSVersion 返回 "major.minor.build" 格式如果系统没有名字.
变更 对象来支持 x[,y]
, x.y[,z]
和 x[](y)
.
x. __Call(,y)
.x[]
检索 x 的默认属性并且 fn[]()
可以用来调用 JScript 函数.一些底层的修改来修正 bug, 减少代码大小或者提高性能, 包括:
错误修正:
修正 VK 到键名的转换来遵循 A-Z 的布局.
修正 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() 所报告的行号的问题.
改进按键映射来支持 scXXX::Y
当当前键盘布局不映射 scXXX
至 VK 码. 当然, Y
必须存在在当前键盘布局.
修正 break n
运转正常当当前是 until
的情况, 而不是终止线程.
修正 ControlGetFocus 破坏用户双击的能力(感谢 HotKeyIt).
修正 ListView 不调用 g标签 当消息事件是不支持或未知的情况, 例如 LVN_GETEMPTYMARKUP.
修正 #Include *i <X>
当 X 语法错误时退出程序.
修正 for var in expression
有时程序崩溃当 expression 调用一个脚本函数时.
移除 Win9x/Win2k 上使用的 16 色图标支持.
移除 单独的托盘图标资源.
改进 选择 DLL/EXE 文件图标尺寸的功能.
修正 热键在加载时验证出错的情况.
修正 /iLib 开关写入文件即使语法出错.
修正 使用 try..finally 来修正 return/break/continue/goto.
修复 Hotkey 命令在创建变量中已存在的热键时引起程序崩溃(由 v1.1.19.00 引入).
为 Hotkey 命令和 A_TimeIdle 做了多处优化(删除 Win9x 的支持).
为 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 引入).
改进 线程在调试器的调用堆栈上的表现.
改进 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# 的歧义情况.添加 创建 JavaScript/IE DOM 对象的新特性的支持.
修正 FileAppend, %VarContainingClipboardAll%, File
导致的崩溃问题.
修正 COM 事件句柄没有收到最后的对象参数.
新特性:
添加 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.
修正 静态类变量不作为一个标签的目标, 该标签立即优先于类.
修正 x.y/[]/{} 有时错误地被标记为可变参数.
修正 覆盖时只读属性产生的崩溃.
修正 当 RegExMatch 对象是未捕获的子表达式的崩溃情况.
修正 Abs() 和 Mod()
修复 支持在类中使用 #include(被 a6ea27f 破坏).
修正 某些情况剪切板返回二进制 CF_HDROP 数据.
改进 文件被打开的情况下 FileGetSize 的精度.
改进 for 循环在 COM 对象中的表现.
支持在类中动态定义属性.
为 Gui 控件定位增加 x+m 与 y+m 选项.
为 ListHotkeys(列出热键) 中每个热键增加 #InputLevel 项.
优化带O(对象) 选项的 RegExMatch(正则查找). 某些情况下, 捕获长字符串较之前有极大提速.
修正 对象, 当 __Call 结束时将检测新方法(与 __Set 及 __Get 一致).
修正 一些 VarSetCapacity 失败后的未定义行为.
修正 FileRead, 使正确报告文件超 4GB 时的错误, 而非截断数据, 即便不需要这部分数据时.
修正 FileRead *c, 使当字节长度为奇数时, 亦能正确的放置空结尾字符.
修正 ClipboardAll 的问题, 作如下改变:
修正 带负屏幕坐标值的 TreeView 控件的 A_EventInfo 值.
修正 ListView/TreeView 消息筛选中可能的问题.
修正 A_LineFile/A_LineNumber 在 #If 表达式中(无法正确返回设计值) 的问题.
修正 #If, 被添加到 ListLines 中(将显示为 If ).
修正 Abs(["-"]*)
及类似情况下的崩溃问题.
修正 全局中} funcdef(){
及}}
结尾的方法/属性/类.
修正 性能问题: &变量包含长数字字符串
.
修正 问题: 当内置变量被赋值为对象时, 会破坏内存数据.
修正 解析器: 以禁止某些代码中的 continue
命令, 即便当前函数定义在 Loop 内.
修正 错误: File.Encoding := x "-RAW"
打断对非 ASCII 字符的编码/解码. -RAW
后缀现在被忽略.
修正 使用 Exit 或 Throw 后元函数不正常退出线程的问题.
修正 未编译脚本中 FileInstall 的 Dest 为相对路径时, 使用 A_WorkingDir 的问题.
修正 调试对象中负整数键的问题.
改变内置的错误和警告对话框为置顶.
修正 Until
不会从递归的文件和注册表循环中中断的错误.
添加 A_OSVersion 值 WIN_8.1
.
改变 Hotkey 命令根据是否存在颚化符(~) 前缀应用或移除热键已有变体的穿透行为.
改变 exe manifest 以允许 GetVersion/GetVersionEx 检测到 Windows 8.1.
修正 当 Function 为纯整数 0 时 DllCall() 会让脚本崩溃的问题.
修正 IsFunc("ComObj(")
返回错误而不抛出异常的问题.
修正 ControlClick 发送 XButton1/XButton2 时存在的问题.
修正当 <c10>X. __Init 中止线程时 new X
中内存泄漏的问题.
修正当断点散布在方法定义中时会转移到类变量初始化位置的问题.
修正 x::
和 x up::
, 当 x 作为修饰键被阻止在按下触发时则让它们都在弹起时才触发. 在 v1.1.14 中的预期行为是当 x 还用于自定义组合键(如 x & y::
) 的时候, 则 x 的单独热键和组合键都会在弹起时触发.
修正 不带 Catch/Finally 的 Try 过程中无异常抛出时崩溃的错误.
增加 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.
.修复 用已命名值调用带参可变函数.
从v2测试版移植 StrSplit() 函数.
可选参数可通过连写两个逗号的方式略过, 如 InStr(a, b,, 2)
. 和之前版本不同的是, 这种方式可以用在对象(包括COM对象) 和内置函数中. [a,,b]
的写法可以用来创建稀疏数组.
对象属性现在可以通过使用可变值的方式赋予, 如 x[y*]:=z
中 y 包含了 键名/索引或一组参数.
修复 GuiControl/Get 接受 ComboBox 的子 Edit 控件的 ClassNN. 已经支持指定 ComboBox 的子 Edit 控件的 HWND, 作为识别 ComboBox 的方法.
修复 InputBox 默认的 宽/高(被 v1.1.11.00 - commit 7373cc6443 破坏).
修复 DllCall arg 类型验证以安全地处理 SYM_OBJECT, 并遵守 #Warn UseUnset(当变量名称不是有效类型时).
变更 VarSetCapacity(var) 没有警告未初始化的变量.
增加 支持 %A_LineFile%
用于 #Include 中.
降低 AutoHotkeySC.bin 的文件大小通过减少(很少用) 文件类型图标的分辨率.
修复 类 X 扩展 Y
允许 Y 在 X 之后定义.
由 fincs 开发: AutoHotkey 现在是对 DPI 敏感的. 当 DPI 不是 96 时, Gui 命令自动补偿. 请参阅 Gui -DPIScale.
改进 RegRead 支持 REG_BINARY 值大小超过 64K.
改进 RegWrite 支持 REG_BINARY/REG_MULTI_SZ 值大小超过 64K.
修复 进程关闭(以及可能的其他事情) 在 Windows XP.
增加 基本支持自定义 Gui 控件.
改进 SoundSet, SoundGet 和音量管理对 Windows Vista 及更高版本的支持.
修复 Run "<file>" <args>
不作为的 args 的一部分传递空格.
修复 从控制台输入(CONIN$) 读取的一些问题 .
修复 当 Gui 本身(不是控件) 有焦点时, Gui 菜单加速键不工作.
修复 two bugs 影响了目标变量包含未刷新二进制数但具有零容量的某些赋值.
修复 GuiControl 和 GuiControlGet 当给定的 HWND 不属于当前 Gui 时, 作用于错误的控件. 相反, 条件被视为错误.
修复 OnMessage 函数在目标 Gui 是子窗口时正确设置 A_Gui 和 A_GuiControl.
修复 MsgBox 在给定无效选项时显示错误消息, 而不是静默退出线程.
修复 类初始化中的语法错误导致程序崩溃而没有正确的错误消息.
修复 AND/OR 跟在多语句逗号后面, 例如 ((x, y) and z)
.
修复 RegExReplace 正确支持重复的子模式名称.
修复 Object.Remove() 不释放字符串键.
修复 base.Invoke() 不依赖于动态变量解析.
破坏性的变化:
移除 对 .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()
以便调试器在适当的时候会真正中断.
优化 代码大小, 修复了几个错误, 使得调试器通常更加健壮.
调试器: 修复 max_depth 是预期限制的一半或无限制.
破坏性的变化:
变更 脚本默认的代码页变更为 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 的措辞, 并在警告对话框的底部添加了指向文档的指针.
调试器的改进:
新特性:
增加 通过 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 期间显示的错误信息, 能确定适当的行.
修复 Ctrl/Alt/Shift key-down(键-按下) 热键打断在它之前定义的任何相应键 key-up(键-松开) 热键.
修复 键-按下热键如果在相同的一个键的键-松开 热键之后定义, 总是使用钩子. 如果键-按下 热键使用 "reg" 方法, 键盘钩子将阻止键-按下事件并且仅触发键-松开热键.
修复 加载时检查解释没有解引的表达式为原始文本. 例如, gosub % "foo"
之前在加载时解析为 "foo":
. 类似的, % ""
即使允许空字符串, 在各种情况下也被视为无效.
修复 当 GetClipboardData() 失败时, 可能会发生罕见的崩溃.
修复 ComObjArray() 在失败时返回一个空字符串, 而不是任意的整数.
修复 Object.Remove(i, "")
影响 !Object.HasKey(i)
的整数键.
修复 当在 Unicode 版本读取 UTF-16 时, FileRead 忽略 #MaxMem.
修复 动态函数调用带有内置变量, 如 %A_ThisLabel%()
.
增强 %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
方法的警告.
修复 在 Section 省略而 Key 不省略的情况下 IniRead 会崩溃的问题.
修复 当文件大小为 4GB 或更大时 FileGetSize 的精度.
修复 MsgBox 逗号智能处理需要数字选项, 而不是标题.
新特性:
整合 #InputLevel 指令和 SendLevel 命令 by Russell Davis.
整合 支持 Link 控件 by ChrisS85.
破坏性变更:
变更 命令解析器在参数的开头或结尾避免修剪转义字符, 如 `t
或 `
.
变更 MsgBox 的智能逗号处理, 以改善稳定性和一致性.
%
现在可用于选项或超时的表达式中.%Timeout%.500
). 与文档相反, 通常解析绝大多数以 %
开头的其他情况作为表达式(包含双重解引).变更 A_IsUnicode/A_IsCompiled 被定义为 ANSI 版本/未编译脚本中的空字符串, 而不是未定义. 这使他们能够检查而不会触发 #Warn 警告. 副作用包括:
变更 当改变修饰键状态时, 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 自动-包含错误的文件.
修复 当使用的对象区域含有字符时, inc (++) 和 dec (--) 不再有效.
修复 当使用未初始化变量时, inc (++) 和 dec (--) 产生警告.
修复 当循环内没有大括号 "{..}" continue n
行为不当.
修复 RegExMatchObject[Name]
有重复的名称时正常工作.
修复: ControlGet 的子命令 Selected 在 64 位中不稳定的问题.
修复: 在等待底层线程显示的对话框时, CPU 达到极限(并可能在其他情况下).
修复 Loop...Until 变量含有对象
.
修复 在某些情况下加载编译过的脚本时, 文件结尾的错误检测.
修复 当 SendInput 发送特殊字符或 {U+xxxx} 时, 自动释放修饰键(被 v1.1.00.01 破坏).
修复 ComObjConnect() 过滤掉 非-dispatch 接口, 而不是让脚本崩溃.
修复 new %VarContainingClassName%()
变量包含类名.
修复 类声明允许指令, 如 #Include.
增加 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 循环时, 枚举器对象不被释放.
修复 FileRemoveDir 不能正确设置 ErrorLevel 的问题.
警告: 这个版本包含许多潜在的破坏性变更.
增加 表达式处理支持: 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 是无效的, 在加载时被捕获.修复 bug 影响递归可变函数.
增加 支持 GUI 名称.
增加 支持通过 HWND 识别 GUI .
增加 +Parent%ParentGui%
Gui 选项.
增加 通过 +Owner%HWND%
支持额外的窗口从属于 Gui.
增加 GuiControlGet 子命令 Name.
增加 通过 Gui 命令支持 ActiveX 控件.
修复: 空 hotkey 控件返回 "vk00".
修复: COM 事件或 ComObjConnect() 崩溃及相关的内存泄漏.
修复: GuiControlGet OutputVar, Subcmd,
%OutputVar% 总是失败的问题.
变更 "Missing )/]/}" 错误消息比 "Unexpected )/]/}" 更清晰.
变更 ListLines 显示每次迭代执行的 While 和 Until 行.
变更 ~= 优先级高于 =/!=/</>/<=/>= 但是低于连接("."), 添加相关说明到帮助文件中.
修复(调试器): 子项数目属性不包括 Object.Base.
修复: 在 x64 构建中, 变量的容量被限制在 2GB.
修复: 最后找到的窗口不被 #if WinExist(T)
设置.
变更 A_PriorKey 排除 key-up 事件.
修复 在某些情况下进程的名称或路径检索, 包括:
增加 TV_SetImageList().
需要非标准 Shift 状态( 16 和 32 ) 的字符现在回退到原来的方法, 而不是产生错误的按键.
改进 处理死键解决多个脚本中热字串激活时产生的问题.
增加 使用简单赋值语法支持类定义中的实例变量.
移除 类定义中使用 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.
修复: 当发送特殊字符时, 修饰键不会自动释放的问题.
修复: 扫描码/修饰键映射冲突, 例如 sc1xx vs ^sc0xx.
修复: $ 和 #UseHook 如果仅在热键的第二个或后续实例上使用, 则不起作用.
修复: 从 __Delete 元函数返回值时可能发生崩溃.
修复: "未初始化的变量" 的警告是由调试器触发的.
变更: base.Method()
不在触发默认的 元函数或警告.
变更: Gui +(Ex)Style
不在 隐藏/显示 Gui 窗口.
变更 调试器将未初始化变量报告 type="undefined".
增加 当字符确实需要 "hankaku" 键时, 检查以避免不正确的发送击键.
增加 支持整数作为类变量名.
增加 "Static" 关键字用于声明类对象.
新特性:
实现了基本的类定义的语法.
实现了 new
关键词用于创建派生对象.
增加 Func() 用于获取现有函数的引用和改进 IsFunc 来识别函数引用.
增加 在对象区域支持 ++
和 --
, 例如 x.y[z]++
.
变更:
变更 __Delete 不再触发 __Call.
变更 OnClipboardChange 在可能的情况下(例如, 在 Windows Vista 及以后的系统中) 使用 AddClipboardFormatListener 以提高稳定性.
带有 (
的自动连接更具选择性, 所以一些无效的表达式, 例如, 12(34)
将不再工作.
修复:
修复 SetTimer Label, -0
被视为 "允许一次, 马上".
修复 A_MyDocuments 等使用 SHGetFolderPath, 而不是未公开的注册表键.
修复 非空 ExcludeText 导致没有文本的窗口被排除.
修复 当表达式封闭在 {}
时, 逗号被误作为参数的分割符.
修复 仅在 表达式 参数计算之后, For-loop 才设置 A_Index, 以便可以使用外部循环的值.
修复 默认脚本位置是基于包含 EXE 的目录(如文档所示), 而不是工作目录.
改进 加载时的验证以检测用 Goto 跳出函数的无效尝试.
修复 64 位构建不缩短 HWND 或 SendMessage/PostMessage 参数到 32 位.
修复 */::
被当作无效热键(从 L54 版本开始).
修复 图标.
增加 {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
作为错误而不是忽略 ^
.
新特性:
ComObjQuery: 查询 COM 对象的接口或服务.
ComObjFlags: 获取或改变控制 COM 包装器对象行为的标志.
ComObjCreate() 允许非 dispatch 对象的创建, 如果指定了 interface identifier(IID, 接口标识符).
COM 数组支持 for-loops 和 Clone() 方法.
ListVars 显示每个 COM 包装器对象内部变量的类型和值, 以及包装器的地址.
变更:
当原义整数或包含数字字符串和缓存的二进制整数两者的变量赋值到对象的字段时, 储存整数而不是字符串. 这特别有利于脚本调用接收整数而不接受字符串的 COM 方法, 或是根据值的类型具有不同结果的 COM 方法.
ComObjParameter() 对 VT_UNKNOWN 和 VT_DISPATCH 类型现在接受空值(Null).
改进 对公共语言运行库(.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 起产生该错误).
在某些情况下, 错误对话框指向不相关的代码行.
优化 文件 I/O.
增加 #Warn 去协助调试; 由 ac 初始设计.
默认, 如果 name_var 包含函数, name_var.()
调用该函数. 这可以像以前一样, 通过默认基对象覆盖.
Run 支持动词作为参数, 例如, Run *RunAs %A_ScriptFullPath% /Param
.
如果运算符既能接收一个运算对象(&x
) 也能接收两个 数字的 运算对象(x & y
) 紧跟在带引号的原义字符串后, 自动连接发生以及运算符仅应用到右边的运算对象. 因为, 带引号的原义字符串总是被认为是非数字的. 因此, 数字运算符没有有效的输入. 例如, 像这样的 "x" &y
和"x" ++y
表达式现在能正常工作.
修复:
^!+
.~x::
现在对 x & y::
有效, 同样的方式在 ~x & z::
, 而不是没有效果.修复 在对象调用返回的结果或内置函数返回的结果没有使用时, 导致的内存泄漏, 例如, file.ReadLine()
或 SubStr(x,y,z)
单独在一行.
在 v1.0.92.01 中所做的修复替换为更好的修复, 这也修复了 k::MsgBox(),x:=y
以及不打断 if()
.
变更: FileCreateDir 现在设置 A_LastError.
修复: 在某些情况下, GuiControl()
或类似的语句被错误的当作命令.
增加 对象的混合赋值, 例如, x.y += z
.
在 Unicode 构建中, 改进 IniWrite. 阻止空行出现在新文件的开头.
改进语法解析器. 允许其跟在 {
/}
/Else
后面, 特别是连接时.
修复: COM 方法调用中的清理代码释放了错误的参数.
修复(ANSI): DllCall 在输出时, 设置 Wstr 参数的长度不正确.
修复: 当参数对象为空时, 可变参数函数调用不稳定.
修复(Unicode): RegExReplace 忽略起始位置之前的所有文本(从 1.0.90.00 开始起产生此错误).
修复: RegEx 调出子模式变量 - 由 v1.0.90.00 起被破坏.
COM: 增加了针对 NULL IDispatch/IUnknown 指针的保护.
COM: 如果 VT_DISPATCH 被明确传递, 跳过 QueryInterface for IDispatch.
轻微的可维护性修复: obj.field := var
现在正确的产生 SYM_STRING, 而不是 SYM_OPERAND.
修复: 在文本读取后, File.Write(Str)
意外的结果.
修复: 文件没有 BOM 时 UTF BOM 的检查导致的意外结果.
修复(ANSI): loop 解析和 File.ReadLine()
将 Chr(255)
作为 EOF.
修复(Unicode): UTF-8 和 UTF-16 长度不同导致的 RegExReplace 错误.
修复: 禁止最后的热键钩子阻止输入.
增加: RegExMatch/Replace 的简单优化.
此版本中的所有更改都与 COM 相关.
增加: ComObjError() 现在返回先前的设置.
增加: ComObjType(co) 和 ComObjValue(co).
增加: ComObjMissing().
增加: ComObjArray() 和支持基本的 SAFEARRAY.
增加: ComObjParameter() 的 "Take ownership" 参数.
变更: 在调用函数的过程中, 不再释放通过 ComObjParameter() 传递给 COM 函数的值.
变更: 如果没有找到成员 'x', ComObj.x()
现在回到 PROPERTYGET. 这修复了某些对象在 for-loops 中的使用.
变更: 在对象中包装未处理的变体类型, 而不是返回整数值.
变更: 默认情况下, 自动管理 VT_UNKNOWN/VT_ARRAY 的周期.
修复: 在 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 版本.
增加: 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(而不是 "").
增加: 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.
修复: 在所有的情况下, #If 表达式 现在应该在每次按键时, 每个 表达式 最多只计算一次.
变更: SplashImage 使用常见的图像加载例程; 现在支持 PNG 和类似的格式, 但结果可能不同于之前的图标文件.
增加: For x,y in z
.
增加: Loop ... Until 表达式
, 可用于任何循环或 For 循环.
增加: 命名循环; continue outer_loop
, break 2
, 等等.
调试器: 将标准输出和标准错误输出数据包编码为 UTF-8.
调试器: 当初始化连接失败时, 允许用户终止, 重试 或 忽略.
调试器: 允许通过向脚本发送注册窗口消息来附加调试器客户端.
调试器: 允许通过发送 "detach" DBGp 命令来分离调试器客户端.
增加: static var := expression
.
修复 64 位系统中, DllCall 的 Str*, WStr* 和 AStr* 返回类型.
增加 InStr 的功能, 使之符合 StringGetPos:
增加 #include <LibName>
用于明确地包含函数库文件夹中的脚本.
增加 IniRead 和 IniWrite 的功能, 允许整段被读取或写入.
增加 IniRead 的功能, 允许获取段名列表.
增加 Run/RunWait 中对自定义动词的支持: Run *verb file
.
对 Run/RunWait 从目标参数提取操作及其参数的方式进行了改进.
变更 NumGet/NumPut 以允许 Offset 完全省略, 因为 Type 总是非数字的.
移除 标签不能指向块的结尾的限制.
增加 64 位系统支持编译脚本. 需要 Ahk2Exe_L 和 x64 AutoHotkeySC.bin.
修复: Deref 操作符 (*addr
) 拒绝 32 位范围以外的地址.
修复: 在 64 位中, #If 表达式
内存分配错误.
修复: 自定义的热字串终止符的代码点大于 U+00FF.
修复: 特殊字符通过 SendInput/Play 被顺序发送.
修复: */
在连续部分被丢弃(请查看 L54).
修复: 如果没有指定 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 错误代码.
修复: Unicode 构建下使用 RunAs.[jackieku]
修复: 64 位构建下使用 RegisterCallback. [fincs]
修复: 可执行文件无法在 Win2k 和 WinXP SP2 之前的系统中运行. Win2k 需要 SP4 以及更新(可能 KB 816542). XP 未测试.
修复: 诸如 MsgBox 之类的对话框在被另一个脚本线程中断时变得无响应. 在 L45 中添加的消息过滤器/解决方法必须删除.
修复: 默认 ANSI 代码页中的多字节字符; 这也导致内存泄漏.
修复: ComObject 现在允许纯数字化的 property/method 名称.
提高 FileOpen/File 对象的可用性和功能.
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 子命令.
与 AutoHotkey64 合并 - COM 支持和 64 位兼容性.
x64 (自 AutoHotkey64 以来的变化):
COM (自 AutoHotkey64 以来的变化):
为枚举器实现了常见的语法验证代码. 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()
).
增加 在双重引用中支持内置变量和环境变量.(译者增加示例如下:)
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)
空终止于无效地址.
修复: ObjRemove 的键参数现在是可选的, 正如, Object._Remove.
修复: 文件在读取时, 不能正确的被锁定, 不同于旧版本.
修复: 大写的十六进制格式导致负整数变成无符号类型.
修复: 当满足特定条件时, RegExMatch 破坏输出数组项目. 请参阅 bug 报告.
变更: 使用 <程序文件名>.ahk 代替 AutoHotkey.ini 或 AutoHotkey.ahk.
变更: 脚本文件默认为 UTF-8; 用 /CPnnn 重写.
修复: 脚本退出时不再暂停, 以便对象 __Delete 元函数正常运行.
改进 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 版本中只返回一半的文本.
增加 obj._NewEnum().
增加 ObjMethod(obj). 为每个内置的方法 obj._Method()
添加 ObjMethod(obj).
变更: ObjSet/Get/Call 不再被脚本调用/重写.
修复: L48 中增加的 VK_PACKET 检测导致的潜在的崩溃风险.
修复: VK_PACKET 事件中的字符码可能被误认为扫描码.
修复: ExcludeText 在第一次匹配控件后无效.
修复: 独立的 obj.()
不再被识别为错误的表达式.
ControlSend 现在能使用 WM_CHAR 支持没有关联键码的字符. 例如, 这适用于 "…"(en-US), "∞" 在 Unicode 构建和 {U+221e}
在任一构建.
对 VK_PACKET(VK=E7) 事件, KeyHistory 现在显示完整的16位字符. Send 可以间接生成 Unicode 字符.
修复(Unicode): ControlGet, 列表视图中获取条目列表.
增加 A_FileEncoding, 返回当前的默认编码设置.
增加 _GetAddress; _SetCapacity/_GetCapacity 在一个指定区域生效. [更多信息]
增加 由子类化导致的 WM_PAINT 无限循环的解决方法.
允许 obj.()
作为一种手段来调用对象的默认方法; 相同于 obj[""]()
.
开发: 增加了 MSBuild 4.0 & VS2010 的决方案和项目文件. [更多信息]
修复(Unicode): 'Running' 列在 ListHotkeys 中.
修复: 尝试设置 "nothing" 导致脚本崩溃. 例如, x[]:=z
.
修复(Unicode): 不能找到默认的脚本(Documents\AutoHotkey.ahk).
修复(Unicode): 从注册表读取 A_Desktop, A_ProgramFiles 和其他几个内置变量的值导致字符串不正确的终止.
修复(ANSI): InStr 或 StringReplace 不能找到 0x80-0xFF 区域的字符.
变更(ANSI): ToCodePage/FromCodePage 像对其他 未支持/无效 子命令一样处理.
修复: obj.Func() 当应该是空字符串时, 却产生一个随机整数的错误.
与 AutoHotkeyU 合并.
大量 bug-修复和改进, 与之相关的内容的合并.
修复: 在浮点数字作为对象的键时, 相当于空值. 现在利用 float format 将其转换为数字字符串, 按照原来的意图.
变更 元函数和多参数行为来提高适应性. 现在调用元函数之前(*before*) 搜寻基对象的相应字段; 因此, x.base 的值将覆盖元函数定义的 x.base.base 的值. 现在通过避免 "Return", 链式元函数(继承的) 是可行的.
改进 默认基函数与实际对象更一致.
变更(调试器): 当步进式调试代码时, 跳过除了以函数结束的所有区块.
变更(调试器): 当步进式调试隐藏在脚本末尾的 "Exit" 时, 认为它是在最后的物理行之后(*below*), 以避免混淆.
修复(调试器): 在 Base64 解码采用 property_set 产生的错误.
增加: #MenuMaskKey 指令改变用来屏蔽 Win 或 Alt keyup 事件的按键. 请参阅这一主题的背景信息
变更: 如果 x[1,2]:=3
创建一个对象 x[1]
, 他的基不在自动设置为 x.base
. 请参阅子类化数组嵌套控制这种行为的一种方法.
增加: 支持 obj[method_name](params)
对象调用语法.
变更: 如果 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) 不需要空格或逗号来分割.
修复: 以两个或更多个 "." 开始的独立表达式, 例如, x.y.z()
(被 L34 破坏). 还需注意 '(' 或 '[' 或 ':=' 仍然是需要的.
变更: 将对象中的值设置为空字符串现在存储空字符串, 而不是从对象中删除键-值对. _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 处理程序.
修复: 对于返回对象或纯数字的函数, 局部变量不会自动释放.
修复: 与三元运算符和 Object() 相关的两个两个独立的引用计数错误.
修复: 如果脚本的对象函数所返回的字符串直接分配给一个变量, 该变量的长度不能正确设置.
修复: 如果表达式中的最后一个操作从临时对象获取了字符串, 那么对象和字符串就会提前释放.
修复: 当通过变量从函数返回或传递给递归函数时, 不保留具有特殊格式的数字字符串.
修复: 如果表达式的最终结果(除了 Return) 是对象, 则正确地产生一个空字符串而, 不是静默地中止该线程.
修复: __Delete 元函数有时会覆盖 deref 缓冲区中的临时值.
增加: 通过 &object 获取的地址可以使用 Object(address) 转换回对象引用.
修复: 当指定少于三个参数时, Send/PostMessage 会崩溃的问题.
增加: 对象/数组的支持和许多微小的变化使这成为可能.
增加: 支持 While(expression) 之间没有空格.
增加: Trim, LTrim, RTrim.
增加: A ~= B; 等效于 RegExMatch(A, B). 可能在将来的修订版中删除.
修复: 与LowLevel 不兼容.
变更: [, ] 和 ? 字符在变量名称中不再有效. 因此, ?(三元运算) 不再需要两边的空格.
变更: 现在可以在非动态函数调用的参数列表中的任何位置省略可选参数. 由于这可以通过在加载时自动插入参数的默认值, 因此不支持或允许动态功能调用.
调试器: 各种微小的变更使程序流程容易遵守步进式调试代码.
优化: 如果 DllCall 的第一个参数是原义字符, 这标识函数已经存在于内存当中了, 那么此字符串会自动被解析为函数地址.
升级 从 v1.0.48.03 到 v1.0.48.04.
升级 从 v1.0.48.02 到 v1.0.48.03.
所有支持的图片格式可用于菜单图标. 当前在 Windows Vista 和更高版本中如果需要被设置的图标保留透明度时, 则必须指定 "真实的大小". 例如:
Menu, Icon, MenuItemName, Filename.png,, 0
改进 通过执行二进制搜索函数名称查表来改进动态函数调用的平均性能. 这种变化也适用于其他领域, 例如加载时解析表达式中的函数引用和运行时解析 OnMessage(), RegisterCallback() 等.
升级 从 v1.0.48.00 到 v1.0.48.02.
修复: 如果 owner-drawing 正在使用中, 则菜单图标没有绘制在具有子菜单的项目上.
修复: 如果所有菜单项都被删除时菜单图标不会被释放.
变更(源代码): 重命名 AutoHotkey.sln 到 AutoHotkey_L.sln 使 VS 窗口被识别更容易.
修复: Send {U+xxxx} 正确的设置修饰键状态为普通热键.
修复: Send {U+..xx} 不再触发 hotkey SCxx.
增加: 支持 Send {U+xxxx}. SendInput() 在可用的情况下适当支持 Unicode, 否则回到 Alt+Numpad.
修复: GuiControl, Enable/Disable 现在只在焦点控件被禁用时重置焦点.
优化 If var [not] in/contains MatchList, 特别是对于包含较短字段的长列表.
优化 While. [感谢 Chris]
修复(调试器): 版本 19 和 20 从调用堆栈中忽略了计时器的线程.
修复(调试器): 在大多数情况下不转义 XML 的保留字符.
修复(调试器): 在退出脚本之前, 最终的响应中使用了不正确的命令和 transaction_id.
变更: 如果不能用新方法加载图标, 则返回旧方法.
增加: Gui, Font, qN 选项设置字体质量/控制的反锯齿效果, N 是从 0 到 5 之间的数字.
修复: IL_Add 在存在多个尺寸时现在加载最合适大小的图标.
与 AutoHotkey v1.0.48 合并, 引入 Chris 的 bug 修复, 优化和其他改动. AutoHotkey_L 特性被整合进主发行版; 下面列出变更和新特性:
修复: 在以前的版本中合并紧挨着的赋值, 不完整的错误修复导致在某些情况下跳过剩下的表达式 .
增加: 使用菜单命令中的 Icon 和 NoIcon 子命令来实现菜单的图标.
变更: 现在可以使用负图标号来指示可执行文件中的资源 ID.
变更: 将菜单的默认样式设置为包含 MNS_CHECKORBMP.
变更: 加载自定义托盘图标的小型和大型版本, 以允许在适当的地方显示正确的图标.
修复: 从可执行文件加载的图标大小不同于系统中的大小.
修复: 删除菜单项部分删除其相关子菜单.
修复: SetFormat 在*编译*脚本中存在不会禁用二进制数字写入缓存. SetFormat 现在应该在编译脚本中正常工作.
Chris 修复许多错误和优化(pre-v1.0.48 beta).
增加: 支持正则表达式和自动调出选项 'C'.
变更: A_AhkVersion 现在包括修订号. 例如, 这是 1.0.47.07.L14.
修复: HWND/window ID 扩展到 64 位. 例如, 0xb482057e 变为 0xffffffffb482057e.
修复: 无效的 DllCall 类型在某些构建环境中被视为 INT.
增加: 当禁用焦点控件变通方式解决 GuiEscape 问题.
变更 版本信息: 内部名称, 产品名称和文件描述(说明) 现在由 "AutoHotkey_L" 替代 "AutoHotkey".
修复: 在内置变量上使用 property_get 时可能存在访问冲突. -- DBGP
修复: 通过后期构建脚本从 AutoHotkeySC.bin 中删除校验和(AutoHotkey 必须安装).
增加: .L 后缀添加到 A_AhkVersion 中.
增加: 初步支持 DBGp(交互式调试).
修复: WheelLeft/WheelRight 支持, 在 revision 9 失效.
修复: 允许在 While 中使用 Break/Continue.
修复: 在非英语系统, TrayTip 的问题和使用 Vista 头带来的其他可能的副作用.
增加: #IfTimeout 指令设置用于评估 #If 表达式的超时值, 毫秒作为单位. 默认是 1000.
增加: 函数的假定静态模式. "静态变量" 必须先于任何局部/全局变量声明.
增加: One-true-brace 风格支持 While.
变更: While 现在设置 A_Index 在迭代的开始.
增加: IsFunc(FuncName) - 返回非零数字, 如果 FuncName 函数在脚本中存在或是内置函数.
清理 清理过时的对测试脚本的引用.
增加 基本的默认测试脚本.
增加: #if (表达式) - 类似 #IfWinActive, 但是适用于任意表达式.
增加: WheelLeft, WheelRight - 支持由 Windows Vista 开始引入的 WM_MOUSEHWHEEL.(需要 Vista.)
增加: While, 表达式 - 当条件为真时一直循环.
增加: A_IsPaused - 底层线程暂停时为真.
增加: A_IsCritical - 使用 "Critical" 命令标记当前线程为不间断运行时为真.
变更: 允许传递任意数字参数到动态函数.
修复: WinGetClass 和子窗口造成的非法访问.
修复: 空动态函数引用造成的非法访问.