变更和新功能

AutoHotKey

变更和新功能

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

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

1.1.26.01 - 2017年7月16日

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

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

修复 SC → VK 转化为多媒体键, CtrlBreak, Pause, LWin 和 RWin, 但 Windows 2000 和 XP 上的多媒体键和 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:

  • 如果使用了 AutoSizewh 选项, 第一次调用 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日

破坏性变更:

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

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

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-1h-1 选项失效问题.

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

1.1.22.06 - 2015年9月13日

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

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

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

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

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

修复 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 参数允许 % 表达式 (除了命令).

修订 对象方法:

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

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

添加 StrReplace().

移除 RegRead 的过时的5参数模式, 这是为了兼容 AutoIt v2(额外的参数是未使用的).

变更 RegRead, RegWrite and 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 events 和 Gui control events 接受函数替换标签, 如果没有找到标签.

增强 Hotkey, Menu, SetTimer and Gui control events接受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 破坏用户双击的能力(thanks 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开关写入文件即使语法出错.

修正 return/break/continue/ 跑到 try..finally.

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.YX.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 或者写入 stout 或 sterr 通过"*"或者"**" 作为文件名. 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.

增加 SetRegViewA_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 的 区块 之后继续执行.

通过对象调用函数不再作为退出线程的障碍. 因此, 如果使用 Exitclass 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's 当前的选择 .

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

变更 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/throwException().

增加 标准输出流模式支持 #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 NewGuiControl 命令中使用无法识别的选项, 将显示一条错误消息以及线程退出(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%.exeahk_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 := 123Var := (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> 用于明确地包含函数库文件夹中的脚本.

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

增加 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.AtEOFFile.__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, 返回当前的默认编码设置.

增加 StrPutStrGet 扩展了许多新的特性.

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< fooIf!foo 这样的语法错误现在能在加载时被捕获.

修复: 当表达式产生的变量包含对象时, Return 现在能正确的处理了. 例如, Return x:=y, Return (x), Return x,... 以及类似的语句现在能正常工作了 (Return x 已经能正常工作了).

修复: 多参数 get/set 没有正确地支持多个对象的元函数 (例如, for x x[y]x[y, z] 表达式中).

修复: 串联对象赋值, 例如 x[y]:=zr:=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 的第一个参数是原义字符, 这标识函数已经存在于内存当中了, i那么此字符串会自动被解析为函数地址.

升级 从 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 和子窗口造成的非法访问.

修复: 空动态函数引用造成的非法访问.