March 27th, 2012· Fixed Ctrl/Alt/Shift key-down hotkey breaking any corresponding key-up hotkey defined before it.
· Fixed key-down hotkeys to always use the hook if defined after a key-up hotkey of the same key. If the key-down hotkey used the "reg" method, the hook would block the key-down event and trigger only the key-up hotkey.
· Fixed load-time checks interpreting expressions with no derefs as raw text. For example, gosub % "foo" resolved to "foo": at load-time. Similarly, % "" was seen as invalid in various cases even if an empty string should be allowed.
March 23rd, 2012· Fixed a rare crash which can occur when GetClipboardData() fails.
· Fixed ComObjArray() to return an empty string on failure instead of an arbitrary integer.
· Fixed Object.Remove(i, "") affecting integer keys when !Object.HasKey(i).
March 3rd, 2012· Fixed FileRead to ignore #MaxMem when reading UTF-16 on Unicode builds.
· Fixed dynamic function calls with built-in vars such as %A_ThisLabel%().
February 29th, 2012· Enhanced %var%() to support function references, objects imitating functions and the default __Call meta-function.
· Fixed ControlGet List to work for ListViews where the script and the target process aren't both 32-bit or both 64-bit.
· Fixed SendEvent with a key delay of 0; a change introduced by v1.1.05.04 caused it to be slower than intended.
· Fixed Object.Remove(i) not adjusting keys if Object[i] doesn't exist.
· Fixed an error in ComObjType() which may have caused unpredictable behaviour when it is called via an alternative name.
· Fixed ExitApp to exit the thread if an OnExit subroutine prevents the script from terminating, instead of resuming execution after the block which contained ExitApp.
· Calling a function via an object no longer acts as a barrier to exiting the thread. Consequently, if Exit is used or a runtime error occurs within a class method, the entire thread exits instead of just the function.
· Calling a base-class method using base.Method() or similar inside a class definition no longer causes a UseUnset warning if the method doesn't exist. Consequently, instantiating an object which has instance variables no longer causes a warning about the internal base.__Init method if the base class has no instance variables.
February 13th, 2012· Fixed IniRead crashing when Section is omitted but Key isn't.
· Fixed accuracy of FileGetSize with files which are 4GB or larger.
February 13th, 2012· Fixed MsgBox smart comma handling to require numeric Options, not Title.
February 13th, 2012New features:
· Integrated #InputLevel directive and SendLevel command by Russell Davis.
· Integrated support for Link controls by ChrisS85.
Breaking changes:
· Changed command parser to avoid trimming escaped characters such as `t or ` at the beginning or end of an arg.
· Changed MsgBox's smart comma handling to improve flexibility and consistency.
· % can now be used to make Options or Timeout an expression.
· If the first arg is an expression, any unescaped comma which is not enclosed in quote marks or parentheses/brackets/braces will cause multi-arg mode to be used. These commas were formerly interpreted as multi-statement operators within the first-and-only arg (Text).
· When Title is an expression, unescaped commas contained within the expression no longer interfere with smart comma handling.
· If there are exactly two args and the first is empty or an integer, multi-arg mode is used. The former behaviour was to combine both into a single arg (Text).
· Timeout can be a literal number or a single deref (and optionally part of a number; for example, %Timeout%.500). Contrary to the documentation, the former behaviour interpreted most other cases beginning with % as expressions (containing a double-deref).
· Title can be an expression even if Text and Options are omitted.
Changed A_IsUnicode/A_IsCompiled to be defined as an empty string in ANSI versions/uncompiled scripts instead of being left undefined. This allows them to be checked without triggering #Warn warnings. Side effects include:
· Attempting to assign directly to A_IsCompiled or A_IsUnicode always causes a load-time error. Dynamic assignments always fail, either silently or with an error dialog as appropriate. Previously assignments were allowed in uncompiled/non-Unicode scripts.
· Attempting to take the address of A_IsCompiled or A_IsUnicode always fails.
· A_IsCompiled and A_IsUnicode no longer appear in ListVars when referenced by a script which is not compiled/Unicode.
· Changed Send and related commands to respect #MenuMaskKey when changing modifier keystates.
Other changes:
· Changed GuiControl Choose to remove the ListBox/ComboBox/DDL's current selection when N=0.
· Changed RegisterCallback to allow a Func object in place of a name.
· Changed ListLines to show filenames (except when compiled).
· Improved Run to output a process ID if possible when ShellExecuteEx is used.
Fixes:
· Fixed handle leaks in RegRead.
· Fixed x.y++ and similar to assign an empty string if x.y is non-numeric.
· Fixed SendInput Win+L workaround causing Win key to "stick down".
· Fixed Ahk2Exe auto-including the wrong file if an auto-include used #Include .
January 4th, 2012· Fixed inc (++) and dec (--) having no effect when used on an object field containing a string.
· Fixed inc (++) and dec (--) to cause a warning when used on an uninitialized variable.
December 19th, 2011· Fixed continue n misbehaving when an inner loop has no braces.
· Fixed RegExMatchObject[Name] to work correctly with duplicate names.
December 8th, 2011· Fixed: Selected sub-command of ControlGet was unreliable on x64.
· Fixed: CPU was maxed out while waiting if an underlying thread displayed a dialog (and possibly in other cases).
December 1st, 2011· Fixed Loop Until VarContainingObject.
November 21st, 2011· Fixed false detection of end-of-file when loading a compiled script in some cases.
· Fixed SendInput to automatically release modifier keys when sending special characters or {U+xxxx} (which was broken by v1.1.00.01).
· Fixed ComObjConnect to filter out non-dispatch interfaces instead of allowing the script to crash.
· Fixed new %VarContainingClassName%().
October 18th, 2011· Fixed class declarations to allow directives such as #Include.
October 8th, 2011· Added Client coordinate mode.
· Added object output mode for RegExMatch and RegEx callouts.
· Added super-global declarations, which avoid the need to repeat global declarations.
· Breaking change: Class declarations such as Class c now create a super-global variable instead of an ordinary global.
· Added more detail to unhandled exception error dialogs.
· Changed Gui +Owner to work even after the GUI is created.
· Changed instance var declarations in class definitions to avoid leaving empty key-value pairs in the class object.
· Changed #Include to use standard error message formatting when it fails (more detail; also respects ErrorStdOut).
· Changed Throw to throw an Exception object by default when its parameter is omitted.
· Changed format of runtime error messages slightly to improve consistency and code size.
· Modified PCRE to use UTF-16 for input on Unicode builds, for performance.
· Upgraded PCRE to 8.13.
· Fixed thread not exiting as intended when an assignment in an expression fails.
· Fixed #MaxMem preventing assignments to variables which don't require expansion.
· Fixed inability of Try/Catch to catch COM errors.
· Fixed GuiControlGet incorrectly treating parameter #2 as invalid in some cases.
· Fixed input vars being resolved too soon, allowing them to be invalidated by an expression later on the same line.
· Fixed RegEx callouts not causing matching to abort when an exception is thrown.
· Fixed DllCall setting ErrorLevel to -4 when it should be -3.
· Fixed While appearing twice in ListLines for its first iteration.
· Fixed Try/Catch to allow If/Loop/For/While with no enclosing block.
· Fixed enumerator object not being released when Until is used to break a For-loop.
September 16th, 2011· Fixed FileRemoveDir setting ErrorLevel incorrectly.
September 12th, 2011· Added exception handling support: try/catch/throw and Exception().
· Added StdOut mode for #Warn.
· Added Gui +HwndVARNAME option.
· Added Gui, New [, Options, Title].
· Added automatic support for keyboard accelerators such as Ctrl+O in Gui menus.
· Changed handling of #Include when the /iLib command-line switch is present to resolve a problem with Ahk2Exe.
· Changed GuiControl to retain the Progress control's current value when its style is changed.
· Changed GuiControl and GuiControlGet to allow a HWND to be passed in the ControlID parameter.
· Removed the 1GB limit from FileRead.
Improved error detection:
· Hotkey, If, Expression, where Expression does not match an existing #If expression, is caught at load-time when possible.
· Hotkey, IfSomething, where Something is invalid, is caught at load-time.
· Class definitions with missing braces are detected as errors.
· If a function call is used on the first line of a class definition, it is now correctly treated as an error.
· GroupAdd now shows an error message when the group name is blank, instead of silently exiting the thread.
· Removed some redundant "unset var" warnings which appeared when using the OutputDebug or StdOut warning modes.
· If an unrecognized option is used with Gui, Gui Show, Gui New or GuiControl, an error message is shown and the thread exits unless try is used. This validation is not done at load-time due to complexity (it is common for the option parameters to contain variable references).
· RegRead, RegWrite and RegDelete now set A_LastError to the result of the operating system's GetLastError() function.
· +LastFoundExist is now treated as an error if it is combined with another option (+LastFound should be used in that case).
· Fixed a bug affecting recursive variadic functions.
August 29th, 2011· Added support for GUI names.
· Added support for identifying a GUI by its HWND.
· Added +Parent%ParentGui% Gui option.
· Added support for external windows as Gui owners via +Owner%HWND%.
· Added Name sub-command for GuiControlGet.
· Added support for ActiveX controls via the Gui command.
· Fixed: Empty hotkey control returned "vk00".
· Fixed: Crashes and memory leaks related to COM events/ComObjConnect.
· Fixed: GuiControlGet OutputVar, Subcmd, %OutputVar% always failed.
· Changed "Missing (/[/{" error messages to "Unexpected )/]/}" for greater clarity.
· Changed ListLines to display While and Until lines which are executed each iteration.
· Changed ~= to have higher precedence than =/!=//= but lower than concat, and added it to the documentation.
August 22nd, 2011· Fixed (Debugger): numchildren attribute did not include Object.Base.
August 22nd, 2011· Fixed: Variable capacity was capped at 2GB on x64 builds.
· Fixed: Last Found Window not set by #if WinExist(T).
August 16th, 2011· Changed A_PriorKey to exclude key-up events.
Fixed process name/path retrieval in certain cases, including:
· Retrieving name/path of a 64-bit process from a 32-bit script.
· Retrieving name/path of an elevated process from a non-elevated process (UAC).
August 7th, 2011· Added TV_SetImageList().
· Characters which require non-standard shift states 16 and 32 now use a fallback method instead of producing the wrong keystrokes.
· Revised handling of dead keys to solve problems which occur when multiple scripts with hotstrings are active.
July 31st, 2011· Added support for instance variables in class definitions, using simple assignment syntax.
· Added new built-in variables: A_ScriptHwnd and A_PriorKey.
· Added new built-in functions: GetKeyName(), GetKeyVK(), GetKeySC() and IsByRef().
· Added new sub-command: WinGet, OutputVar, ProcessPath.
· Added the capability to specify a window by process name or path: ahk_exe %Name%.exe or ahk_exe %FullPath%.
· Optimized ProcessName sub-command of WinGet.
· Changed SetTimer to use A_ThisLabel if Label is omitted.
· Updated ComObjConnect() to support using an object in place of a function name prefix.
· Improved ComObjConnect() to allow the prefix/object to be updated without first disconnecting.
· Improved parsing of continuation sections to allow expressions like (x.y)[z]() without escaping "(".
· Replaced the method used to store script text in 32-bit compiled scripts; now consistent with 64-bit.
· Fixed detection of AltGr in the active window's keyboard layout (on Unicode builds).
· Fixed SendInput applying a redundant LCtrl-up some time after AltGr-up.
July 18th, 2011· Fixed: Modifier keys weren't auto-released when sending special chars
· Fixed: Scancode/modifier-key mapping conflicts such as sc1xx vs ^sc0xx
· Fixed: $ and #UseHook had no effect if used only on the second or subsequent instance(s) of a hotkey
· Fixed: Potential crash when returning a value from a __Delete meta-function
· Fixed: "Uninitialized variable" warnings were triggered by the debugger
· Changed: base.Method() no longer triggers a default meta-function or a warning
· Changed: Gui +(Ex)Style no longer hides/shows the Gui
· Changed the debugger to report type="undefined" for uninitialized variables
· Added check to avoid incorrectly sending keystrokes for characters which actually require the "hankoku" key
· Added support for integers as class variable names
· Added "Static" keyword for declaring class variables
May 3rd, 2011New features:
· Implemented basic class definition syntax.
· Implemented the new keyword for creating a derived object.
· Added Func() for retrieving a reference to an existing function and improved IsFunc to recognize function references.
· Added support for ++ and -- with object fields, such as x.y[z]++.
Changes:
· Changed __Delete to not trigger __Call.
· Changed OnClipboardChange to use AddClipboardFormatListener when available (i.e. on Windows Vista and later) to improve reliability.
· Auto-concat with ( is more selective, so some invalid expressions like 12(34) will no longer work.
Fixes:
· Fixed SetTimer Label, -0 to be treated as "run-once, very soon".
· Fixed A_MyDocuments etc. to use SHGetFolderPath instead of undocumented registry keys.
· Fixed non-empty ExcludeText causing windows with no text to be excluded.
April 14th, 2011· Fixed misinterpretation of comma as an arg delimiter when enclosed in {} in an expression.
· Fixed For-loop to set A_Index only after the Expression arg is evaluated, so that the outer loop's value can be used.
· Fixed default script location to be based on the directory containing the EXE (as documented), not the working directory.
· Improved load-time validation to detect invalid attempts to jump out of a function with Goto.
April 4th, 2011· Fixed the 64-bit build to not truncate HWNDs or SendMessage/PostMessage params to 32 bits.
· Fixed */:: being treated as an invalid hotkey (broken since L54).
· Fixed the icons.
March 28th, 2011· Added {key: value} as syntax sugar for Object("key", value).
· Added [x, y, z] as syntax sugar for Array(x, y, z), which is a new function equivalent to Object(1, x, 2, y, 3, z).
· Added slight optimization: resolve any reference to True, False, A_PtrSize or A_IsUnicode in expressions at load-time.
· Fixed hotkey parser to treat x & ^y as an error instead of ignoring ^.
March 22nd, 2011New features:
· ComObjQuery: Queries a COM object for an interface or service.
· ComObjFlags: Retrieves or changes flags which control a COM wrapper object's behaviour.
· ComObjCreate allows non-dispatch objects to be created if an interface identifier (IID) is given.
· COM arrays support for-loops and the Clone() method.
· ListVars shows the inner variant type and value of each COM wrapper object, in addition to the wrapper's address.
Changes:
· When a literal integer or variable containing both a numeric string and cached binary integer is assigned to a field of an object, an integer is stored instead of a string. This particularly benefits scripts calling COM methods which accept integers but not strings, or have different behaviour depending on the type of value.
· NULL values are now allowed with ComObjParameter for the VT_UNKNOWN and VT_DISPATCH types.
· Improved support for Common Language Runtime (.NET) objects via COM.
· FileRecycle should now warn before deleting a file which is too large to recycle.
· When a SafeArray created with ComObjArray is assigned to an element of another SafeArray, a separate copy is created. This prevents the script from crashing due to a second attempt at "destroying" the array. ComObjFlags allows this behaviour to be avoided.
Fixes:
· Assigning to a COM array of VT_DISPATCH or VT_UNKNOWN crashed the script.
· Break and Continue were tolerated outside of loops in some cases.
· Standalone carriage-return (`r) was not correctly interpreted as end-of-line.
· MouseMove miscalculated negative coordinates with the Input and Event send modes.
· Selecting Edit This Script from the tray menu or using the Edit command crashed the script (broken by v1.0.95).
· Error dialogs pointed at irrelevant lines of code in some cases.
March 22nd, 2011· All file I/O has been heavily optimized.
· Added #Warn to assist with debugging; initial design by ac.
· By default, if name_var contains a function name, name_var.() calls the function. This can be overidden via the default base object, as before.
· Run supports verbs with parameters, such as Run *RunAs %A_ScriptFullPath% /Param.
· If an operator which can accept either one operand (&x) or two numeric operands (x & y) follows a quoted literal string, auto-concat occurs and the operator is applied only to the right-hand operand. This is because quoted literal strings are always considered non-numeric and are therefore not valid input for numeric operators. For example, expressions like "x" &y and "x" ++y now work.
Fixed:
· Wildcard hotkeys were not respecting modifiers such as ^!+ in specific cases.
· File.Pos returned garbage for non-seeking file types; now it returns -1.
· File.AtEOF was incorrectly true in some cases.
· COM wrapper objects left A_LastError unset in some cases.
· Gui submenu icons did not work on Windows 2000/XP/Server 2003.
· SplashImage clipped the image if height > width.
· ComObjConnect did not alert when the first parameter is invalid.
· SplashImage now uses GDI+ only when the other methods fail, for compatibility.
· Tilde in ~x:: now affects x & y:: in the same way that ~x & z:: would, instead of having no effect.
· A_PriorHotkey and A_TimeSincePriorHotkey now have the expected values when used with #If.
· RegExReplace did not advance through the string correctly after a match failure if the string contained non-ASCII characters.
January 20th, 2011· Fixed a memory leak which occurred when the return value of an object invocation or built-in function was not used, such as file.ReadLine() or SubStr(x,y,z) alone on a line.
· Replaced the fix from v1.0.92.01 with a better fix, which also fixes k::MsgBox(),x:=y and doesn't break if().
January 20th, 2011· Changed: FileCreateDir now sets A_LastError.
· Fixed: GuiControl() or similar was sometimes misinterpreted as a command.
January 20th, 2011· Added support for compound assignments with objects, such as x.y += z.
· Improved IniWrite in Unicode builds to prevent an empty line from appearing at the top of each new file.
· Improved the parser to be more permissive about what can follow {/}/Else, especially when combined.
January 20th, 2011· Fixed: Cleanup code in COM method calls was freeing the wrong parameters.
· Fixed (ANSI): DllCall set incorrect length for wstr parameters on output.
· Fixed: Variadic function calls were unstable when param object was empty.
January 20th, 2011· Fixed (Unicode): RegExReplace omitted all text up to StartingPosition (broken by v1.0.90.00)
January 20th, 2011· Fixed: RegEx callout subpattern vars - broken by v1.0.90.00
January 20th, 2011· COM: Added protection against NULL IDispatch/IUnknown pointers.
· COM: Skip QueryInterface for IDispatch if VT_DISPATCH is passed explicitly.
· Minor fix for maintainability: obj.field := var now correctly yields SYM_STRING, not SYM_OPERAND.
January 20th, 2011· Fixed: Unexpected results with File.Write(Str) after text-reading.
· Fixed: UTF BOM check caused unexpected results in files without a BOM.
· Fixed (ANSI): Parsing loops and File.ReadLine() treated Chr(255) as EOF.
· Fixed (Unicode): RegExReplace errors where the UTF-8 and UTF-16 lengths differed.
· Fixed: Disabling the last hook hotkey breaks Input.
· Added: Simple optimization for RegExMatch/Replace.
January 20th, 2011· Added: ComObjError now returns the previous setting.
· Added: ComObjType(co) and ComObjValue(co).
· Added: ComObjMissing().
· Added: ComObjArray() and basic SAFEARRAY support.
· Added: "Take ownership" parameter for ComObjParameter().
· Changed: Values passed to COM functions via ComObjParameter are no longer freed in the process of calling the function.
· Changed: ComObj.x() now falls back to PROPERTYGET if member 'x' is not found. This fixes for-loops for some objects.
· Changed: Wrap unhandled variant types in an object rather than returning integer value.
· Changed: Manage VT_UNKNOWN/VT_ARRAY lifetime automatically, by default.
January 20th, 2011· Fixed: UrlDownloadToFile in Unicode builds on Windows < 7
· Fixed: Upper-ANSI characters were sent as Alt+0 in ANSI build
· Fixed: File.Pos was incorrect after attempting to read past EOF
· Fixed: Escape sequences in #If expressions and static initializers
· Fixed: ClipboardAll sometimes crashed the script with certain formats
· Fixed: Transform HTML calculated length incorrectly for NNN; entities
· Fixed: VarSetCapacity now correctly ignores #MaxMem for ByRef variables
· Fixed: FileAppend,,file.txt set ErrorLevel=1 even on success
· Fixed: Match length was miscalculated for RegEx callouts with the P) option
· Integrated Sean's improvements to number handling in COM interop
· Optimized RegExReplace and RegExMatch in Unicode builds
September 25th, 2009· Fixed crash of SendMessage and PostMessage when wParam or lParam is omitted (broken by 1.0.48.04). [thanks Lexikos]
September 25th, 2009· Fixed StringSplit to work properly inside functions of compiled scripts (broken by 1.0.35.01). [thanks engunneer & Lexikos]
· Fixed SendPlay not to wait for the release of the Windows key prior to sending an "L" keystroke (broken by 1.0.48.01). [thanks Lexikos]
· Fixed A_EndChar to be valid when the B0 option is present, and to be empty when there is no ending character (broken by 1.0.44.09). [thanks Al2000]
· Fixed FormatTime to yield a valid time of day even when the specified month is out-of-range (broken by 1.0.48.00). [thanks silveredge78]
· Fixed FileCreateDir to support a leading backslash even when it is the only backslash; e.g. dir. [thanks jaco0646]
· Fixed GuiControl/GuiControlGet/Gui/SendMessage to work reliably even when they trigger a callback or OnMessage function. [thanks Lexikos]
· Fixed RegExMatch() not to produce too few replacements when an empty-string match is followed by a non-empty-string match.
· Changed "While()" to be recognized as a loop rather than a function. [thanks Crash&Burn]
· Improved UrlDownloadToFile to support FTP and Gopher. [thanks Lexikos]
· Improved the stdout/asterisk mode of FileAppend to write immediately rather than lazily to standard output. [thanks Lexikos]
· Added full support for "if % expression". [thanks kenomby]
May 4th, 2009· Fixed "ListLines On" not to erase the most recent log entry in the line history. [thanks Lexikos]
· Fixed ListView to respond properly to mouse dragging when timers are running. [thanks Solar]
· Fixed key-up hotkeys so that if one is created while its key is being held down, the release of the key doesn't trigger the wrong hotkey. [thanks Peter & engunneer]
April 20th, 2009· Changed and fixed Gosub and GroupActivate so that when a function calls an external/public subroutine, that subroutine will treat all dynamic variables as globals, and will have outside-of-function GUI behavior. [thanks kenomby & Lexikos]
· Improved performance of True/False/A_EventInfo in expressions by treating them as integers vs. strings.
February 26th, 2009· Compatibility: The change most likely to affect backward compatibility is that floating point numbers stored in variables now have higher precision. Scripts that rely on tiny differences in precision would either need to be reviewed and updated, or have their compatibility improved by using "SetFormat Float" (e.g. SetFormat, Float, 0.6) anywhere in the script. "SetFormat Float" disables the higher precision, but gives up some of the new, faster floating point performance.
· Performance: The main theme of this release is faster performance. Almost all scripts should run faster -- especially those that make heavy use of expressions and integer math/comparisons (which may run up to three times as fast). To achieve the full benefit, a script either should avoid using SetFormat or should use SetFormat's fast mode.
Performance improvements:
· Expressions and function calls are compiled more heavily, making them much faster (especially complex integer expressions, including those with commas).
· Binary numbers are cached for variables to avoid conversions to/from strings. This makes numerical operations involving variables much faster.
· Literal integers in expressions and math/comparison commands are replaced with binary integers, which makes them faster; e.g. X+5 and "if x > 5".
· LOOPs, IFs, and ELSEs that have blocks (braces) are faster due to skipping the opening '{'. A side-effect is that the '{' is omitted from ListLines.
· Thread-creation performance is improved, which should help rapid-fire threads in OnMessage(), RegisterCallback(), and GUI events.
· Changes that might affect existing scripts (other than higher-precision floating point described at the top)
· When "SetFormat, Integer, Hex" is in effect, assigning a literal decimal integer to a variable also converts it to hex. Usually this is only a display issue.
· For OnMessage() performance, the message number and HWND arrive as standard numbers rather than appearing unconditionally as hex. Usually this is only a display issue.
· To achieve various improvements in performance, scripts now use slightly more memory (proportionate to the number of variables and expressions).
· Changed and fixed "if var is time" and other uses of YYYYMMDDHHMISS date-time stamps to recognize that months outside the range 1-12 are invalid.
· Changed and improved dynamic function calling to allow passing more parameters than defined by a function, in which case the parameters are evaluated but discarded.
Other improvements:
· Added function IsFunc(), which indicates whether a function may be called dynamically.
· Added the while-loop, which repeats its commands until its expression evaluates to false.
· Added an assume-static mode for functions.
· Added built-in variables A_IsPaused and A_IsCritical.
· Improved NumPut() to support UInt64 like DllCall().
· Improved mouse wheel support by adding WheelLeft and WheelRight as hotkeys and supporting them in Send, Click, and related commands. However, WheelLeft/Right has no effect on operating systems older than Windows Vista.
· Upgraded compiled script compressor from UPX 3.00 to 3.03.
Fixes:
· Fixed inability to use MsgBox's timeout parameter when the "Text" parameter had an expression containing commas.
· Fixed "Menu, Delete, Item-that's-a-submenu" not to disrupt the associated submenu.
· Fixed the GUI Hotkey control to return usable hotkey names even for dead keys (e.g. "^" instead of Zircumflex).
· Fixed RegDelete so that it won't delete an entire root key when SubKey is blank.
· Fixed registry loops to support subkey names longer than 259 (rare). In prior versions, such subkeys would either be skipped or cause a crash.
· Fixed FileSelectFolder by providing an option to make it compatible with BartPE/WinPE.
· Fixed window/control IDs (HWNDs), which in rare cases wrongly started with 0xFFFFFFFF instead of just 0x.
· Fixed inability of Send commands to use the Down/Up modifiers with the "}" character.
March 10th, 2008· Fixed crash when a function was called concurrently with an optional ByRef parameter omitted by one thread but not omitted by the other.
· Fixed "Menu, Tray, MainWindow" to enable the menu items in the main window's View menu.
· Added dynamic function calling.
November 22nd, 2007· Fixed the Sort command: 1) fixed the "function" option not to misbehave when it's the last option in the list; 2) fixed the "unique" option so that when the delimiter is CRLF, the last item can be detected as a duplicate even when it doesn't end in CRLF; 3) fixed the "unique" option not to append a trailing delimiter when the last item is a duplicate. [thanks Roland]
· Fixed RegExMatch() and RegExReplace() to yield correct results even when Haystack and OutputVar are both the same variable. [thanks Superfraggle]
· Fixed inability to pass a parameter that is "a variable to which ClipboardAll has been assigned". [thanks Joy2DWorld & Lexikos]
· Updated RegEx/PCRE from 7.0 to 7.4. For a summary of the major changes, see www.pcre.org/news.txt. For full details of every change and fix, see www.pcre.org/changelog.txt.
· Fixed the Sort command: 1) fixed the "function" option not to misbehave when it's the last option in the list; 2) fixed the "unique" option so that when the delimiter is CRLF, the last item can be detected as a duplicate even when it doesn't end in CRLF;
· Fixed RegExMatch() and RegExReplace() to yield correct results even when Haystack and OutputVar are both the same variable. [thanks Superfraggle]
· Fixed inability to pass a parameter that is "a variable to which ClipboardAll has been assigned". [thanks Joy2DWorld & Lexikos]
· Updated RegEx/PCRE from 7.0 to 7.4. For a summary of the major changes, see www.pcre.org/news.txt. For full details of every change and fix, see www.pcre.org/changelog.txt
· Added GUI control "Tab2" that fixes rare redrawing problems in the original "Tab" control (e.g. activating a GUI window by clicking on a control's scrollbar)
August 28th, 2007· Fixed key-up hotkeys like "a up::" not to block the pressing of the "a" key unless the hotkey's #IfWin criteria are met.
· Fixed Round(Var, NegativeNumber), which in rare cases was off by 1.
· Fixed crash of scripts that end in a syntax error consisting of an orphaned IF-statement (broken by 1.0.47.00).
· Eliminated the "GetClipboardData" error dialog. Instead, an empty string is retrieved when the data cannot be accessed within the #ClipboardTimeout period.
· Changed GUI checkboxes and radio buttons to default to "no word-wrap" when no width, height, or CR/LF characters are specified. This solves display issues under certain unusual DPI settings.
August 1st, 2007· Fixed expressions to allow literal negative hexadecimal numbers that end in "E"; e.g. fn(-0xe).
· Fixed block syntax to allow a function-call immediately to the right of a '}'.
July 20th, 2007· Fixed the Number option of Edit controls to properly display balloon tips when the user types something other than a digit.
· Fixed WM_TIMER not to be blocked unless it's posted to the script's main window.
· Fixed wildcard hotkeys not to acquire tilde behavior when the same hotkey exists in the script with a tilde.
· Fixed declaration initializers not to retain whitespace at the end of literal numbers. Also, they now allow spaces between a closing quote and the next comma.
July 10th, 2007· Fixed RunAs not to crash or misbehave when a domain is specified. [thanks Markus Frohnmaier]
· Changed relational operators to yield integers even when the inputs are floating point; e.g. 1.0 < 2.0 yields 1 vs. 1.0. [thanks Lexikos]
June 19th, 2007· Added support for function libraries, which allow a script to call a function in an external file without having to use #Include.
· Added RegisterCallback(), which creates a callable address that when called, redirects the call to a function in the script. [developed by Jonathan Rennison (JGR)]
· Added NumGet() and NumPut(), which retrieve/store binary numbers with much greater speed than Extract/InsertInteger.
· Improved Sort with an option to do custom sorting according to the criteria in a callback function.
· Improve OnMessage() with an option to allow more than one simultaneous thread.
· Improved Critical with an option to change the message-check interval, which may improve reliability for some usages.
· Changed Critical to put SetBatchLines -1 into effect.
· Changed the error messages produced by #ErrorStdOut to contain a space before the colon.
· Fixed OnMessage() functions that return one of their own local variables to return the number in that variable, not 0.
· Fixed potential crashing of built-in variables that access the registry (e.g. A_AppData, A_Desktop, A_MyDocuments, A_ProgramFiles).
June 1st, 2007· Fixed A_UserName
June 1st, 2007· Fixed A_UserName (broken by 1.0.46.16).
May 30th, 2007· Fixed "Gui, Tab, TabName" when used after a previous "Gui Tab".
· Improved SetTimer to treat negative periods as "run only once".
· Added "GuiControlGet Hwnd", which is a more modular/dynamic way to retrieve a control's HWND.
· Added built-in variables A_ThisLabel and A_ThisFunc, which contain the names of the currently-executing label/function.
May 9th, 2007· Fixed GuiControl, GuiControlGet, and "Gui ListView/TreeView" to support static variables and ByRefs that point to globals/statics.
· Fixed FileInstall causing the Random command to become non-random in compiled scripts.
· Reduced the size of compiled scripts by about 16 KB due to UPX 3.0. [thanks to atnbueno for discovering the optimal command-line switches]
May 2nd, 2007· Added the "require administrator" flag to the installer to avoid a warning dialog on Windows Vista.
May 1st, 2007· Fixed hotkeys like *x to fire even when x is also a hotkey that is prevented from firing due to #IfWin.
· Improved optional parameters to accept quoted/literal strings as default values.
· Improved ByRef parameters with the ability to be optional (i.e. they may accept default values).
April 25th, 2007· Fixed inability to recognize a literal scientific notation number that begins with 0, such as 0.15e 1. [thanks Laszlo]
April 23rd, 2007· Fixed inability to have a function-call as the first item in certain comma-separated expressions. [thanks Majkinetor]
· Fixed WinTitles like "ahk_id %ControlHwnd%" in ControlGet's FindString/Choice/List, and Control's Add/Delete/Choose. [thanks Freighter & PhiLho]
· Improved floating point support to recognize scientific notation; e.g. 1.2e-5 (the decimal point is mandatory). Also improved "SetFormat Float" with an option to output in scientific notation. [thanks Laszlo]
March 23rd, 2007· Fixed StringSplit inside assume-local functions so that it creates a local array even when OutputArray0 exists as a global but not a local.
· Improved ListView's item-changed notification ("I") to indicate via ErrorLevel whether the item has been selected/deselected, focused/unfocused, and/or checked/unchecked.
· Added an additional layer of protection to compiled scripts. It is recommended that scripts containing sensitive data or source code be recompiled with the /NoDecompile switch.
March 4th, 2007· Fixed ":=" deep inside expressions when used to assign the result of a recursive function to a local variable (broken by 1.0.46.06).
· Fixed inability to pass certain ternary expressions to ByRef parameters
· Fixed "GuiControlGet, OutputVar, Pos" so that it doesn't make the OutputVar blank.
· Changed and fixed continuation sections so that the "Comment" option doesn't force the LTrim option into effect.
· Changed the Terminal Server Awareness flag back to "disabled" on AutoHotkey.exe and compiled scripts. This improves flexibility and backward compatibility.
February 8th, 2007· Fixed unreliability of ComSpec and environment variables on Windows 9x (broken by v1.0.46.07).
· Changed the Terminal Server Awareness flag back to "disabled" on AutoHotkey.exe and compiled scripts. This improves flexibility and backward compatibility
· Changed: When AutoHotkey.exe is launched without a script specified, it will now run (or prompt you to create) the file AutoHotkey.ahk in the My Documents folder. The only exception is when AutoHotkey.ini exists in the working directory, in which case it uses the old behavior of executing that file.
· Improved DllCall to support an integer in place of the function name, which is interpreted as the address of the function to call.
January 17th, 2007· Applied minor fixes and improvements to regular expressions by upgrading from PCRE 6.7 to 7.0. One of the most notable improvements is the `a option, which recognizes any type of newline (namely `r, `n, or `r`n). Similarly, the R escape sequence means "any single newline of any type".
· Changed and fixed all Control commands and StatusBarWait to obey SetTitleMatchMode RegEx as documented.
· Changed RegExReplace() to return the original/unaltered string rather than "" when an error occurs.
· Changed: Enabled the Terminal Server Awareness flag on AutoHotkey.exe and compiled scripts.
· Improved performance when assigning large strings returned from user-defined functions.
January 4th, 2007· Fixed the Input command to allow named end keys like {F9} to work even when the shift key is being held down (broken by v1.0.45).
· Fixed inability of "Gui Show" to focus the GUI window when the tray menu is used both to reload the script and to show the GUI window.
· Fixed inability to pass some types of assignments (:=) to a ByRef parameter.
January 2nd, 2007· Fixed inability to pass the result of an assignment (:=) to a ByRef parameter
December 19th, 2006· Fixed ListView's floating point sorting to produce the correct ordering
December 18th, 2006· Fixed environment variables to work properly as input variables in various commands such as StringLen and StringReplace (broken by 1.0.44.14).
December 15th, 2006· Fixed comma-separated declaration initializers such as "local x = 1, y = 2" to work even when immediately below an if/else/loop statement.
· Fixed comma-separated expressions so when the leftmost item is an assignment, it will occur before the others rather than after.
· Changed and fixed function-calls so that any changes they make to dynamic variable names, environment variables, and built-in variables (such as Clipboard) are always visible to subsequent parts of the expression that called them.
· Changed: When a multi-statement comma is followed immediately by a variable and an equal sign, that equal sign is automatically treated as a := assignment. For example, all of the following are assignments: x:=1, y=2, a=b=c
· Changed comma-separated expressions to produce the following effects: 1) the leftmost /= operator becomes true divide rather than EnvDiv; 2) blank values are not treated as zero in math expressions (thus they yield blank results).
· Improved the performance of expressions by 5 to 20% (depending on type).
· Improved the new assignment operators such as .= to support the Clipboard variable (even in comma-separated expressions).
· Improved the .= operator so that it doesn't require a space to its left.
· Improved GUI controls to accept static variables as their associated variables (formerly only globals were allowed).
· Added option HwndOutputVar to "Gui Add", which stores a control's HWND in OutputVar
November 29th, 2006· Added function SubStr(), which retrieves the specified number of characters at the specified position in a string.
· Added assignment operators //=, .=, |=, &=, ^=, >>=, and
November 15th, 2006· Fixed crash on Windows 9x when a script doesn't actually run (e.g. due to syntax error) (broken by v1.0.45).
· Changed "Control Style|ExStyle" to report ErrorLevel 0 vs. 1 when the requested style change wasn't necessary because it was already in effect.
· Improved #Include to support %A_AppData% and %A_AppDataCommon%.
November 12th, 2006· Fixed file-pattern loops not to crash when recursing into paths longer than 259 characters. In addition, such paths and files are now ignored (skipped over) by file-pattern loops, FileSetAttrib, and FileSetTime.
· Fixed functions that call themselves and assign the result to one of their own locals (broken by v1.0.45).
· Fixed crash of scripts containing regular expressions that have compile errors.
· Fixed GuiControl not to convert checkboxes into 3-state unless requested.
· Changed UrlDownloadToFile to announce a user-agent of "AutoHotkey" to the server rather than a blank string.
· Improved continuation sections to support semicolon comments inside the section via the option-word Comments
November 8th, 2006· Fixed StringUpper and StringLower to work when OutputVar is the clipboard (broken by v1.0.45).
· Fixed the hotkeys ~Alt, ~Control, and ~Shift to fire upon upon press-down rather than release (broken by v1.0.44).
· Background: Without the tilde, Alt/Control/Shift fire upon release to avoid taking over both the left and right key. But a specific left/right hotkey like LAlt or RShift fires upon press-down.
November 6th, 2006· Although this release has been extensively tested and is not expected to break any existing scripts, several low-level performance enhancements were made. If you have any mission-critical scripts, it is recommended that you retest them and/or wait a few weeks for any bugs to get fixed.
· Added support for regular expressions via RegExMatch(), RegExReplace(), and SetTitleMatchMode RegEx.
· Improved performance and memory utilization of StringReplace.
· Improved performance of the := operator for expressions and functions involving long strings.
· Improved ControlClick with a new option "NA" that avoids activating the target window (this mode also improves reliability in some cases). In addition, it's been documented that SetControlDelay -1 can improve the reliability of ControlClick in some cases.
· Changed GUI buttons to default to "no word-wrap" when no width, height, or CR/LF characters were specified. This may solve button display issues under some desktop themes.
· Fixed "Transform HTML" for the following characters: &`n><
· Fixed misinterpretation of lines starting with "if not is" such as "if not IsDone".
· Fixed inability of "Gui Show" to move a window vertically downward to where its bottommost row of pixels is now.
· Fixed inability to use GroupActivate as the only line beneath an IF or ELSE.
· Fixed inability of the Input command to differentiate between end-keys enclosed in braces and their (un)shifted counterparts; e.g. '{' vs. '['.
October 3rd, 2006· Fixed loop-variables like A_Index when accessed in more than one of a line's parameters. The inaccuracy occurred only when one of those parameters called a function that returned directly from the body of a loop.
· Changed ListVars to display ByRef parameters by their own name rather than the caller's.
· Changed the Input command to do nothing on Windows 9x (not even setting ErrorLevel and OutputVar).
· Raised the limit on the number of GUI fonts from 100 to 200.
· Changed StrLen()/StringLen and internal string-handling to avoid calculating a string's length when possible. Although this enhances performance (especially for large strings), scripts that use DllCall to pass a string via the address operator (&) rather than as a str parameter should call VarSetCapacity(Var, -1) to correct the internally-stored length (if it changed).
· Improved performance slightly (above and beyond the StrLen improvement).
September 21st, 2006· Fixed ControlGetPos and ControlMove to work with "ahk_id %ControlHWND%".
· Fixed #CommentFlag to affect the line beneath it the same way as other lines.
· Changed A_OSVersion to report Windows Vista as "WIN_VISTA" rather than "".
· Added options to set min/max size of GUI windows; for example: Gui MinSize320x240 MaxSize640x480
September 14th, 2006· Fixed timers interfering with double-clicks in FileSelectFile.
· Fixed mouse hook causing a delay when pressing a GUI window's title bar buttons.
· Improved GUI windows to have CS_DBLCLKS so that OnMessage() can monitor double clicks via WM_LBUTTONDBLCLK, WM_RBUTTONDBLCLK, and WM_MBUTTONDBLCLK.
· Improved ListViews to support logical sorting, which treats digits as numbers rather than mere characters.
September 9th, 2006· Fixed FileSelectFolder and TreeView to respond properly to mouse clicks when timers are running.
· Fixed inability of OnMessage() to consistently monitor certain messages such as WM_NOTIFY. [thanks NumEric]
· Fixed inability of literal/quoted strings to contain `%.
· Fixed continuation sections to support #EscapeChar, #DerefChar, and #Delimiter. [thanks Laszlo]
· Changed GroupBox to default to "no word-wrapping". This can be overridden via Wrap.
· Changed/improved the ** operator and "Transform Pow" to support negative bases when the exponent isn't fractional. [thanks Laszlo]
· Improved GUI responsiveness during UrlDownloadtoFile (especially for slow downloads
August 27th, 2006· Fixed OnMessage() when called from inside a monitor function for the purpose of disabling some other monitor.
· Changed/fixed ImageSearch's TransN option to use RGB vs. BGR as documented.
· Changed the installer to omit the "Run" verb for .ahk files. The "Open" verb is now the default (with a new display-name of "Run Script").
August 10th, 2006· Fixed hook hotkeys like $^b not to fire twice when a similar, key-up hotkey exists (like "#b up" ).
· Fixed one too many backspaces in asterisk hotstrings whose next-to-last character is a dead key
· Fixed "Gui Color" to work after the background color was previously changed to "default".
· Changed "if var is xdigit" to tolerate a 0x prefix.
· Added command "Gui LabelMyGui" to support custom label names (e.g. "MyGuiClose" instead of "2GuiClose"). This also allows multiple GUI windows to share the same set of labels
July 25th, 2006· Fixed "Gui Show" not to unmaximize a window unless the options require it.
· Fixed GuiControl's /-Left/Right for buttons, checkboxes, and radios.
· Fixed UpDown creation to widen its buddy only when the buddy had no explicit width.
· Improved MsgBox/IfMsgBox to support Cancel/Try Again/Continue, as well as a Help button.
June 17th, 2006· Fixed stack overflow when a registry-loop traverses deeply nested subkeys.
· Fixed Hotkey command to report ErrorLevel 0 vs. 51 upon success for joystick hotkeys.
· Changed ClipboardAll to exclude formats that cause Outlook's MS Word editor to display error dialogs.
· Changed and improved UrlDownloadtoFile to retrieve the file from the remote server vs. the cache. There is a new option to override this.
· Improved remapping to support destination characters that don't exist on the keyboard (such as F1::ð in English).
June 9th, 2006· Fixed remapping-to-modifier such as F1::Control (broken by 1.0.44.05).
June 8th, 2006· Fixed mouse movement being off by 1 pixel for coordinates very near 0 (broken by 1.0.43).
· Changed and improved remapping-to-modifier (such as F1::Control) to release the modifier during the script's other uses of Send
June 4th, 2006· Fixed double-colon warning dialog appearing upon launch of certain scripts. (broken by 1.0.44.03)
· Fixed combination hotkeys like "a & b" to work even if "b & a" and "b & a up" are also present.
· Fixed buddyless UpDown controls to work even if a StatusBar is present.
May 30th, 2006· Fixed FileExist() to report "X" rather than "" for files whose attributes are all undefined.
· Fixed Tab controls so that the first Text control added to a new page is auto-positioned correctly even if the previously added control was a Text control on some other page.
· Fixed ImageSearch so that a transparent color like TransBlack is as effective in variation mode as non-variation mode.
· Fixed GetKeyState and KeyWait to accept characters that don't exist in the current keyboard layout (in case the keyboard layout changes after launching the script).
· Fixed hotkeys that don't exist in the current keyboard layout (such as ^!ä:: in English) to display a warning and end the auto-execute section.
· Changed and improved ControlSend, Send, Hotstrings, Input, and AltGr handling to use the target window's language rather than the script's. If you use only one keyboard layout on your system, this should not affect anything.
· Improved VarSetCapacity() to interpret a capacity of -1 as "update this variable's internally-stored length". This is useful in cases where a variable has been altered indirectly, such as by passing its address via DllCall().
April 29th, 2006· Improved PixelGetColor with two alternate modes that work in a broader variety of windows and full-screen apps. [thanks TDMedia]
· Improved StringMid to allow "Count" to be omitted to retrieve all characters. [thanks kapege.de]
· Improved FileSelectFile to support special folders such as My Computer via CLSID strings (FileSelectFolder and Run already support them)
April 13th, 2006· Fixed inability of "Menu, Tray, Icon" to load icon #1 from file types cpl/scr/drv/ocx/vbx/acm/bpl (broken by 1.0.43.03). Similarly, all icon-capable features have been improved to support these file types.
· Fixed the following legacy commands to accept function-calls containing commas: EnvAdd/Sub, LeftClick(Drag), RightClick(Drag).
April 10th, 2006· Changed ahk_id to operate directly on the specified HWND when it's a control (child). Previously, it operated upon the topmost sub-control if that control had any sub-controls.
· Improved Post/SendMessage to fully support strings put into address variables by the receiver (e.g. PostMessage, Msg, &MyVar).
· Improved support for control HWND as an alternative to control ClassNN: 1) Added a MouseGetPos option to retrieve control HWND; 2) Added "WinGet ControlListHwnd" to retrieve a list of control HWNDs; 3) Added "ControlGet Hwnd" to retrieve the HWND that corresponds to a control's ClassNN.
· Added "GuiControlGet FocusV", which gets the focused control's variable name rather than its ClassNN.
April 8th, 2006· Fixed and improved support for .ICL files (icon libraries), which was broken by 1.0.43.03.
· Changed case sensitivity in hotkey names back to pre-1.0.43.03 behavior: high ANSI letters like Ä and Ü are treated as different hotkeys than their lowercase counterparts
April 4th, 2006· Fixed crash of characters above Chr(127) in hotstring abbreviations and the locale-search-from-right mode of InStr() and StringGetPos (broken by 1.0.43.03).
April 3rd, 2006· Fixed distortion of 16x16 icons loaded via ahk2exe or Menu, Tray, Icon.
· Fixed the following to ignore #MaxMem as documented: VarSetCapacity(), FileRead, ClipboardAll, and ControlGet (ListView).
· Changed the following to use locale case insensitivity vs. "A-Z only" insensitivity: Hotkey names, Hotstring abbreviations, Menu names, Input's MatchList, and Gui Tab.
· Changed the expression equal operator (=) and the case-insensitive InStr() to use locale case insensitivity when StringCaseSense is Locale or On.
· Improved StringCaseSense with a new option Locale that makes string comparisons case insensitive according to the rules of the current user's locale. For example, most English and Western European locales treat the letters A-Z and ANSI letters like Ä and Ü as identical to their lowercase counterparts.
· Improved the Sort command and ListView sorting with a locale-case-insensitive option.
· Improved mouse wheel hotkeys (WheelDown/Up) to report the number of wheel turns in A_EventInfo, which allows distinguishing between fast and slow wheel movement.
· Improved FileRead with an option to read only the leading part of a file.
March 30th, 2006· Fixed raw-mode hotstrings not to send the extra string {Raw} (broken by 1.0.43).
· Changed SendMode: 1) renamed InputThenEvent to Input; 2) added InputThenPlay, which is the same behavior as the former "Input". This was done because SendEvent is less likely to cause compatibility problems than SendPlay.
March 29th, 2006· Fixed mouse clicking at unspecified coordinates in particular apps; e.g. Send {LButton} (broken by 1.0.43).
· Fixed tilde hotkeys so that if they remove a hook, their own key doesn't get stuck down (e.g. Mouse Gestures script and ~LCtrl::Hotkey, RButton, Off).
March 28th, 2006· Fixed AltGr hotkeys that use Send, such as !m::Send ^c. Also fixed AltGr remappings such as F1::RAlt
· Fixed inability of VarSetCapacity to free the memory of a ByRef parameter.
· Fixed hotstring option b0 to show the ending character where you typed it rather than at the end of the replacement.
· Improved the speed and reliability of auto-replace hotstrings by defaulting them to SendInput mode. There is also a new hotstring option to change the sending mode.
· Improved the reliability of mouse clicks/drags in cases where the user is physically moving the mouse during the event.
· Added commands Click and Send {Click}, which are easier to use than MouseClick. They also compensate if the left/right mouse buttons have been swapped via the control panel.
· Added command SendMode, which makes Send synonymous with SendInput or SendPlay rather than the default (SendEvent). It also makes Click and MouseMove/Click/Drag use the specified method.
· Added two new methods for sending keystrokes and mouse clicks: SendInput and SendPlay. These are generally faster and more reliable. Also, SendPlay allows keystrokes and hotstrings to be accepted by a broader variety of games.
March 10th, 2006· Fixed crash of functions that recursively pass ByRef parameters
March 7th, 2006· Fixed crash of A_ScriptDir (broken by 1.0.42.01).
· Fixed Run/RunWait's passing of an extra space character at the end of the parameter list when launching shortcuts.
March 6th, 2006· Fixed ClipboardAll when used with apps such as Word and Excel (broken by previous version).
· Fixed ClipboardAll to prevent appearance of bookmarks in MS Word.
· Fixed A_TimeIdlePhysical being disrupted by simulated AltGr keystrokes.
· Fixed Send{Blind} not to cause sticking Win/Ctrl/Alt/Shift when the user releases such a key in the middle of a Send.
· Improved the Send command not to press and release the shift key after each uppercase letter (e.g. Send ABC).
· Improved SoundSet/Get to support ComponentType "Headphones".