Home | Download | Documentation | Changelog | Support | Forum | Wiki

Changelog for Year 2005 - December 12, 2005

Fixed "GuiControl, %Var%" when Var is blank or contains only a window number. It now updates the control's contents rather than doing nothing. [thanks MisterW]

Scripts in UTF-8 format can now be loaded (BOM bytes "EF BB BF" at start of file). [thanks D. J. Rausch] - December 1, 2005

Improved ImageSearch and the fast-mode PixelSearch to support 256-color screens (8-bit). - November 21, 2005

Fixed hotkeys such as ^q to trigger the "*q up" hotkey upon release instead of the ^q hotkey a second time. - November 16, 2005

Fixed ComboBoxes to yield the proper selection when: 1) GuiControl altered the Edit field; or 2) the user manually typed a matching item into an AltSubmit ComboBox. [thanks Tekl] - November 16, 2005

Fixed memory leak when a script called a function recursively. [thanks Laszlo] - November 10, 2005

Fixed crash of abs() when called with an empty string. [thanks Laszlo]

Fixed the number -0x8000000000000000 in expressions. [thanks Laszlo] - November 4, 2005

Fixed Ceil(), Floor(), and "Transform Ceil/Floor" to give the correct answers for all inputs. [thanks Litmus Red]

Fixed remapping so that "Enter" can be a destination key. [thanks jocamero]

Changed ahk_id to work on hidden child windows (controls) without the need for DetectHiddenWindows.

Improved Post/SendMessage to accept quoted/literal strings for wParam/lParam. - November 2, 2005

Fixed WinGetText and ControlGetText to work on apps that respond incorrectly to WM_GETTEXT (such as AIM). [thanks Yarbuck]

Changed the program to align all data on 32-bit boundaries, which solves DllCall structure issues. [thanks Shimanov] - October 26, 2005

Because some other solution is necessary, the 1-pixel increase for Checkboxes and Radio Buttons in v1.0.40.01 has been undone. - October 24, 2005

Fixed "Transform Unicode" to be able to produce a Unicode string whose first byte is zero. [thanks Shimanov & Laudrin]

Reduced the size of compiled scripts by 20 KB by having the compiler minimize code size in sections that don't affect script performance. - October 21, 2005

Fixed the title bars of script-owned windows to respond correctly to left and right down-clicks generated by the script's own hotkeys. [thanks Shimanov]

Fixed inability of OnMessage to consistently monitor certain messages such as WM_GETMINMAXINFO.

Changed Critical to be temporarily off during MsgBox and other dialogs.

Added command "Thread NoTimers", which prevents a thread from being interrupted by timers.


Fixed GuiContextMenu's A_GuiControl to be accurate for Text and Picture controls inside a GroupBox or Tab control.

Fixed GuiControl to properly redraw Picture controls and transparent Text controls when they are given new contents.

Increased the width of auto-sized Checkboxes and Radio Buttons by 1 pixel to prevent wrapping on certain desktop themes.

1.0.40 - October 11, 2005

Fixed the v1.0.39 mouse and keyboard hooks so that failure to activate them behaves correctly.

Changed the Send command for Russian and other keyboard layouts to be able to produce more ASCII characters (such as the letters A to Z). This does not affect most Western European and English layouts.

Changed hotkeys that are a subset of a wildcard hotkey to take precedence. For example, if *x and ^x are both hotkeys, pressing ^x will now trigger ^x rather than *x.

Improved syntax so that double colons do not need to be escaped.

Improved Send and ControlSend with option {Blind}, which leaves Ctrl/Alt/Shift/Win pressed down if they started that way.

Added a new remapping method that is more simple and powerful than the old methods. For example:

a::b  ; Make the "a" key become "b".
Capslock::Ctrl  ; Make Capslock become a Control key.
XButton1::LButton  ; Make the fourth mouse button behave like the left mouse button.
RCtrl::RWin  ; Make the right Control key become the right Windows key.

1.0.39 - October 3, 2005

The last change below may impact scripts that use the keyboard or mouse hook. If you have any mission-critical scripts that rely on them, it is recommended that they be re-tested or that you wait two weeks for any bugs to get fixed.

Fixed inability to have lines consisting entirely of spaces and tabs in continuation sections. [thanks JSLover]

Fixed hotkeys such as "LButton & LCtrl" to auto-install the mouse hook. [thanks JSLover]

Added a dedicated thread to service the keyboard and mouse hooks. This eliminates mouse/keyboard lag during long operations such as UrlDownloadToFile. It also prevents keys from getting "stuck down". The new thread consumes only 36 KB of memory and it exists only in scripts that use the hooks. - September 27, 2005

Some optimizations were made to the keyboard and mouse hooks. If you have any mission-critical scripts that rely on them, it is recommended that they be re-tested or that you wait two weeks for any bugs to get fixed.

Fixed continuation lines that start with "AND" and "OR" to work even when the next character is in the set "()!~*&-+". [thanks Decarlo110]

Fixed hotkeys/labels such as "(::" and "(MyLabel):" not to be misinterpreted as continuation sections. [thanks whismerhill] - September 23, 2005

Fixed "Menu Show" (broken in the previous version) to call the selected menu item's subroutine prior to executing the command beneath "Menu Show". [thanks Roussi]

Changed Sleep -1 and Sleep 0 to check the message queue on Windows 9x as they do on other operating systems. - September 21, 2005

Fixed hotstring reset option (Z), which could crash a script. [thanks arbe]

Improved threads to reduce the chance of an interruption occurring before even a single line can execute. [thanks Paul Haines]

Added command Critical, which prevents the current thread from being interrupted by other threads. It also buffers incoming events until the critical thread ends. - September 12, 2005

Fixed key-up hotkeys so that having both a wildcard and a non-wildcard version of the same hotkey works even when the non-wildcard down-hotkey is defined before the non-wildcard up-hotkey. [thanks Paul Haines]

Improved Edit controls with the option "WantTab", which allows the tab keystroke to produce a tab character. - September 8, 2005

Fixed inability of "WinSet Region" to accept a negative X-coordinate.

Fixed radio buttons to start a new radio group for each new tab control or page. [thanks Toralf]

Changed VK hotkeys such as "^VK24::" to avoid the use of the keyboard hook when possible. As a side-effect, such hotkeys are now triggered by any key that has the specified virtual key (e.g. both Home and NumpadHome for VK24). [thanks Orion]

Improved the Hotkey command with option "On" to change a hotkey's label and enable it in one step. [thanks Toralf]

Improved "GuiControl Disable/Enable/Hide/Show" to recognize an optional 1 or 0 suffix to simplify scripts. [thanks Toralf] - September 5, 2005

Fixed GuiContextMenu's A_GuiControl to be non-blank when the user right-clicks a Text, Picture, or Tab control.

Changed OnMessage() to receive LPARAM as an unsigned vs. signed number.

1.0.38 - September 3, 2005

Fixed the Input command to properly capture keystrokes sent by a hotkey or hotstring for which the user is physically holding down SHIFT, CTRL, ALT, or WIN. [thanks wildfire]

Changed "GuiControl, Text" to set the text of a ComboBox's Edit control rather than new choices for its drop-list. Please update your scripts accordingly.

Improved FileMoveDir with an option to unconditionally overwrite the target folder.

Added built-in function IsLabel(), which verifies that a label exists before you Gosub it. [thanks Tekl]

Added built-in function OnMessage(), which can receive custom messages and monitor system messages.

Added a WinLIRC client script that responds to signals from a hand-held remote control. WinLIRC is an open-source utility that captures infrared signals from virtually any brand of remote control. - August 27, 2005

Fixed disruption of a GUI window's custom icon when "Menu, Tray, Icon" loads a new icon. [thanks Tekl]

Fixed hotstring option "O" (omit end-char) to work even when "B0" (no-backspace) is in effect. [thanks Tekl]

Improved AltTab hotkeys to support Escape as a means of canceling the operation. [thanks catweazle] - August 21, 2005

Fixed auto-replace wildcard hotstrings whose last character is produced via dead key (e.g. :*:jsá::). [thanks jordi]

Fixed the tray icon to turn green when a paused thread is interrupted by a new thread.

Changed and improved the Pause command: 1) "Pause Off" always affects the thread immediately beneath the current thread rather than the nearest paused thread; 2) "Pause [Toggle]" always pauses the current thread if the thread beneath it is unpaused; 3) Added an option to pause the underlying thread rather than the current thread. [thanks Decarlo110]

Improved the "Pause Script" menu item to work even when the script is idle (which prevents timers from running). [thanks Rajat]

Improved SoundSet and SoundGet to support N/A for ComponentType and numeric values for ControlType. There is also an example script to discover your soundcard's capabilities. - August 16, 2005

Fixed hotkeys such as ^!a not to fire twice when "a & b::" is a hotkey. Also fixed hotkeys such as ^!a to work without a $ when "a" is a prefix key such as "a & b::". [thanks t0nyk0]

Fixed hotkeys "LButton::" and "RButton::" not to disrupt Edit control context menus. [thanks Tekl]

Fixed "GuiControl ChooseString" not to ignore the first two items in each ListBox/ComboBox/DDL. [thanks Tekl] - July 30, 2005

Fixed serious bugs introduced by the previous version in the Send command and other keyboard features. - July 30, 2005

Fixed minor issues when a script's language/layout changes while it's running. This affects hotkeys, hotstrings, Send, and possibly other areas.

Fixed the hotkey control for Numlock and NumpadDiv (previously it yielded SC145 and SC135).

Improved "Gui, Tab" with an exact-match mode. [thanks Tekl]

Improved hotkeys to recognize the following symbols as valid key names: #!^+$<>*~ [thanks Tekl] - July 25, 2005

Fixed key-up hotkeys such as "LButton Up" to avoid disruption of non-hotkey events such as Shift-LeftClick. [thanks Icfu] - July 22, 2005

Fixed "ControlGet, List" for ListViews in List/Icon view. [thanks Rajat]

1.0.37 - July 21, 2005

Fixed inability of WinGetText and "WinGet ControlList" to output to Clipboard.

Fixed inability to retrieve Clipboard more than once in the same line.

Fixed LV_ModifyCol() to accept floating point column widths. [thanks Toralf]

Improved StatusBarWait to continue waiting even if the bar becomes temporarily unresponsive.

Improved "ControlGet, List" with the ability to get text and other info from ListViews such as Explorer. - July 18, 2005

Fixed tilde key-up hotkeys for Win/Alt such as "~LWin up::".

Fixed bitwise-not of a floating point value such as ~1.0.

Improved VarSetCapacity with the ability to zero-fill a variable's memory.

Improved DllCall by adding Gdi32.dll to the set of default DLLs.

Added operators & and * for use with memory addresses and binary data.

Added documentation to DllCall demonstrating how to use structures. - July 12, 2005

Fixed AltGr issues: 1) Inability of Send command to produce uppercase AltGr characters (introduced in v1.0.35); 2) Sticking control key for hotkeys such as "^!t::Send a" when fired via AltGr; 3) Possibly other AltGr issues. [thanks Henrique Peron]

Fixed ListView drawing problems when inside a Tab control. [thanks beardboy] - July 9, 2005

Fixed ToolTip, which was broken in v1.0.36.03 for operating systems older than XP. - July 7, 2005

For ListViews: 1) Fixed the inability to switch out of tile mode; 2) The "H" (HotTrack) event is no longer received because its high frequency interfered with a script's processing of more important events. [thanks Toralf] - July 6, 2005

Improved FileSelectFolder to support a starting folder that doesn't restrict upward navigation.

Improved SetTimer to support an interval of up to 49.7 days rather than the previous 24.8. [thanks MIchael]


Fixed AltSubmit ListView's disruption of context menu.

Fixed LV_ModifyCol()'s auto-sizing to have no effect when not in report view (avoids traumatizing the ListView). [thanks Toralf]

Improved ListViews: 1) A_EventInfo contains the focused row for more types of events; 2) LV_GetCount("Col") retrieves the number of columns; 3) Added "Tile" as a large-icon viewing mode (XP only). [thanks Toralf] - July 3, 2005

Fixed hotstrings to work when the script is displaying an InputBox.

Fixed tilde key-up hotkeys such as "~5 up::" to avoid double-character output.

Disallowed linefeeds (`n) and other invisible characters in variable names.

Increased the stack limit from 1 to 4 MB, which allows functions and subroutines to recurse more deeply. Note: This does not increase the memory used by a typical script. [thanks Rubens]

Doubled the speed of accessing empty variables (which are slow due to the need to check if they're environment variables).

Improved all windowing commands to support multiple criteria (such as title+class) to narrow down the search.

Added built-in variable A_LoopFileExt, which contains the loop file's extension. - June 28, 2005

Fixed FileCopy and FileMove to avoid deleting a file that is copied/moved onto itself. In such a case, FileCopy still counts it as a failure but FileMove now counts it as a success. [thanks mario_a]

Fixed continuation sections so that accents and commas after the word Join don't change the behavior of accents and commas in the section. [thanks Nemroth]

Added "WinSet Top", which attempts to bring a window to the top of the stack without activating it. [thanks catweazle]

1.0.36 - June 27, 2005

Fixed double syntax error for a bad function call in a block.

Improved "Process, Exist" to fetch the script's own PID when no other parameters are given. [thanks Junyx]


Added GuiContextMenu, which facilitates the display of custom Gui context menus.

Added Gui +Delimiter`n as a means to change the separator between fields.

Added A_EventInfo for use by OnClipboardChange, ListBox, GuiSize, and GuiDropFiles.

Added A_GuiEvent as a synonym for A_GuiControlEvent.

Added +/-Redraw as a means to accelerate the filling of a ListBox.

Added new control type ListView, which is a tabular view of rows and columns. It features built-in sorting and support for displaying icons. - June 20, 2005

Fixed inability of #Include to recognize escaped semicolons in compiled scripts.

Improved popup menus to reactivate the previously active window before allowing the menu thread to start. [thanks thomasl] - June 20, 2005

Improved popup menus to reactivate the previously active window when the menu is dismissed. [thanks thomasl] - June 20, 2005

Fixed inability of popup menus to be dismissed via Escape or clicking outside the menu (new bug in v1.0.35.12). [thanks Paulo] - June 19, 2005

Fixed crash if a compiled script contained certain unusual hotkeys such as "End & a::". [thanks TheLeO] - June 18, 2005

Fixed script crash when it overrode a built-in function (new bug in v1.0.35.11). [thanks B_fisher]

Fixed IfExist and FileExist() to work on volume names in "\\?\Volume{...}" format.

Changed popup menus other than TRAY so that they avoid activating the script's main window. - June 16, 2005

Improved #Include to be able to set a new working directory for subsequent uses of #Include and FileInstall. In addition, #Include is now able to resolve %A_ScriptDir%. [thanks Dmitry]

Improved FileInstall to always get the file from A_ScriptDir vs. A_WorkingDir when no absolute path is specified. - June 12, 2005

Fixed Hotstrings and Input so that the user's press of Ctrl+Alt as a substitute for AltGr is not disrupted. [thanks Laszlo]

Fixed A_TimeSinceThisHotkey to not be altered by GUI threads.

Added OnClipboardChange, which is a label launched automatically whenever the clipboard changes. [thanks ApplePie] - June 10, 2005

Fixed MonthCal and DateTime controls so that a g-label does not interfere with the calendar's arrow buttons. [thanks guivho]

Fixed the sending of AltGr characters so that AltGr's automatic LControl events don't trigger hotkeys. [thanks Laszlo]

Changed the behavior of AltSubmit MonthCal controls to address deficiencies. Please adjust your scripts accordingly. - June 9, 2005

Fixed the inability of a script's first line to be "/*" (broken in [thanks Harmless] - June 8, 2005

Fixed Control (^) hotkeys that send AltGr characters such as "{" in German. (broken in v1.0.35). [thanks Hajos] - June 8, 2005

Fixed Send on NT4 so that AltGr keys such as "\" in French are sent properly (broken in v1.0.35). [thanks Nemroth]

Fixed "SetCapslockState off" when the OS allows Capslock to be turned off only via the SHIFT key. [thanks Teddy]

Improved line merging: 1) A line starting with "." is automatically appended to the line above it; 2) Comments and blank lines may exist between continuation lines without affecting the merger.

Added directive #LTrim as a means to make multiple continuation sections use the LTrim setting. - June 6, 2005

Fixed "Gui +OwnDialogs" to not get turned off by "Gui Show" and other sub-commands.

Fixed ahk2exe's ignoring of last parameter when /out, /icon, and /pass were all specified. [thanks Rajat] - June 5, 2005

Fixed expressions so that operators without spaces around them, such as x*y*z, always produce correct answers. [thanks Mark Kantor] - June 4, 2005

Fixed the inability to create DateTime and MonthCal controls on an OS older than XP.

Added a new method of breaking up long lines: A line that starts with "and", "or", ||, &&, or a comma is automatically merged with the line directly above it. - June 3, 2005

Fixed Break/Continue syntax errors and other compiled script bugs introduced in v1.0.35.01. [thanks ranomore] - June 3, 2005

Fixed "GuiControl, , MyRadio|MyCheckbox, NewText", which was broken in v1.0.35. [thanks ranomore]

Fixed shorthand style "if not VarName" so that VarName may start with B, C, I, or N.

Reduced the size of each compiled script by about 5 KB (by means of omitting non-essential syntax checking).

Improved GUI Hotkey control to notify the script of changes via g-label.

Added modal/owned dialogs for GUI windows: MsgBox, InputBox, FileSelectFile, and FileSelectFolder.

1.0.35 - June 1, 2005

Important: Some internal changes were made to the Send command. If any of your scripts rely on the subtle differences between the left, right, and neutral modifiers keys (Control, Alt, Shift, and Win), it is recommended that they be retested prior to adopting this version.

Fixed the Send command's inability to send AltGr characters (such as "\" and "{" on the German keyboard) to apps that don't allow Ctrl+Alt as a substitute for AltGr. [thanks xrat]

Improved functions to support optional parameters.


Fixed Tab controls' g-label to launch when the page is changed via keyboard navigation. Also, controls added to a Tab control while the window is visible are drawn correctly.

Improved Edit controls to support g-labels, which notify the script when an Edit's contents have changed.

Added control types DateTime and MonthCal, which allow a date and/or time to be entered in various formats.

Added control type UpDown, which is a pair of arrow buttons that can be clicked to increase or decrease a value.

1.0.34 - May 25, 2005

Fixed the Suspend and Hotkey commands' inability to disable joystick hotkeys, as well as the inability to enable them in the auto-execute section. [thanks matt911]

Fixed "Transform Deref" to support a built-in or environment variable that isn't directly referenced elsewhere in the script. [thanks toralf]

Fixed inability to launch the program on Windows 95/NT systems that lack MSIE 3 or later.

Fixed ListLines, which sometimes terminated the listing prematurely.

Fixed multi-line Edit controls so that pressing Escape in them does not close a non-GuiEscape window. [thanks Rajat]

Fixed the hotkeys #LAlt and #RAlt to prevent appearance of the Start Menu. [thanks Dmitry Lyudmirsky]

Fixed GuiControl so that reloading a picture control inside a tab control redraws properly. [thanks hanspeter]

Fixed VarSetCapacity() when called inside an expression.

Improved DllCall so that the "A" suffix on something like MessageBoxA can be omitted even when the DLL name is explicitly specified. In addition, the letter P may be used in place of * so that the quotes can be omitted around all types. [thanks Jerry]

Added floor division operator "//" for high performance integer division.

Added built-in functions Abs, ACos, Asc, ASin, ATan, Ceil, Chr, Cos, Exp, FileExist, Floor, GetKeyState, InStr, Ln, Log, Mod, Round, Sin, Sqrt, Tan, and StrLen. - May 17, 2005

Fixed sporadic inability of GuiControl to change the default button or a button's style. Also fixed a possible crash when GuiControl established a default button when there's wasn't one previously. [thanks hanspeter]

Improved DllCall so that arg types that don't contain an asterisk/space don't need to be enclosed in quotes.

Added command Gui Margin to override a window's default margin.

1.0.33 - May 13, 2005

Fixed inability of IfMsgBox to detect a timeout for a MsgBox that contains only an OK button. [thanks Mats]

Added function VarSetCapacity(), which enlarges or shrinks a variable.

Added function DllCall(), which calls a function inside a DLL. [code by Marcus Sonntag (Ultra)]

1.0.32 - May 5, 2005

Improved #Include: The file name may be preceded by *i and a single space to ignore any file errors. [thanks Tekl]

Added +/-Theme as a per-control option (GUI). This can also be used to create a themed tab control. [thanks Titan]

Added a method to break up long lines into several smaller ones. This is especially useful for hotstrings and FileAppend. See line continuation. [thanks various] - April 29, 2005

Fixed the inability of WinSet Region to properly restore the original region, which prevented maximize from working. [thanks AntonyB & Skrommel] - April 27, 2005

ImageSearch is now much more useful: 1) Icons are supported (even ones containing transparent sections); 2) PNG, TIF, ICO, and other image formats are supported; 3) Approximate images may be found by allowing the image's colors to vary by a specified amount; 4) Matching is a little more lenient because the mystery-byte of each pixel color is ignored. [thanks Aurelian Maga] - April 19, 2005

Fixed A_Index, A_LoopFileName, and similar variables when used in more than one parameter of a command that calls functions. In addition, a function may now access the caller's contents of these variables. [thanks corrupt]

Fixed inaccurate line numbers of function calls. This affects A_LineNumber, ListLines, and error dialogs. [thanks Laszlo] - April 15, 2005

Fixed various ways in which normal lines were being falsely detected as function calls. [thanks Payam & Jon] - April 14, 2005

Fixed ImageSearch so that partial matches at the edges of the search region are not considered complete matches. [thanks Invalid User]

Fixed the inability of labels to contain parentheses, a bug introduced in v1.0.31. [thanks Jon] - April 13, 2005

Fixed the Clipboard variable to avoid producing an error when a set of zero files was copied onto the clipboard. [thanks Serenity & Tekl]

Fixed GuiDropFiles and "Gui +/-Options" so that they don't remove window transparency and other effects. [thanks toralf] - April 11, 2005

Fixed sub-expressions in function parameters yielding incorrect result; e.g. Add(2*3,3). [thanks Laszlo]

Fixed open-parenthesis being seen as a syntax error if used after a command that lacks a first comma; e.g. MsgBox (). [thanks Laszlo]

1.0.31 - April 8, 2005

NOTE: Although this release has been extensively tested, quite a few low-level changes were made. It is recommended that mission-critical scripts be re-tested -- or that you wait two weeks for any bugs to get fixed -- prior to adopting this version.

Fixed the inability of a timer to reset itself. For example, if "SetTimer, MyTimer" is done within the MyTimer subroutine, the timer will begin waiting for an entirely new interval to expire before running again.

Fixed syntax checker reporting parentheses inside of quoted strings as unbalanced.

Fixed GuiControl to be able to change the ReadOnly attribute of an Edit control. [thanks Bahri]

Changed expressions so that references to invalid dynamic variables such as Array%VarContainingSpaces% produces a runtime warning.

Lowered the precedence of string concatenation in expressions. Although this is unlikely to affect any scripts, if you have any doubt please consult the operator precedence table.

Improved string concatenation in expressions to work on anything (e.g. arrays and sub-expressions). In addition, a period can be used as a concatenation operator to improve readability.

Dynamic variables such as Array%i% are up to 1000 times faster. A script may now have several million variables without a large slow-down. [thanks Laszlo]

Improved the performance of GuiControl and GuiControlGet when used on a window that has hundreds of controls.

Expressions that use a lot of ANDs and ORs are faster due to short-circuit boolean evaluation.

Improved memory conservation in scripts that use thousands of variables by adding two new variable capacities: 1 and 6. Formerly, the smallest capacity (other than zero) was 63.

Added built-in variables A_LineNumber and A_LineFile, which contain the currently executing line number and the file name to which it belongs. [thanks toralf]

Added directive #ClipboardTimeout, which changes how long the script persists in trying to open the clipboard (default 1000 ms). [thanks Tekl & Jason Payam Ahdoot]

Added the ability to pass parameters and receive return values from functions. Functions also support local variables. In addition, ListVars can show the contents of local variables to help debugging. See functions for details. - March 14, 2005

Fixed crash when a GUI window was destroyed and recreated within the same thread. [thanks corrupt] - March 12, 2005

This release consists entirely of minor changes.

Changed the tray icon menu to open only after the right mouse button has been released. This allows a remapped right mouse button to open the menu correctly. [thanks eamat]

Changed "WinGet Count" to retrieve all windows on the system rather than the "last found window" when all four window parameters are blank.

Improved compiled scripts to conceal the script's source code when a runtime error occurs (such as trying to launch a nonexistent file). This concealment can be disabled via "Menu, Tray, MainWindow". [thanks Rajat]

Improved StringGetPos to optionally to skip over a certain number characters on the leftmost or rightmost sides. [thanks Tekl]

Improved ClipboardAll to omit any redundant CF_METAFILEPICT data that is present, which saves space.

Improved ListBoxes so that the tab character is always expanded rather than shown as an empty square. In addition, tab-stops can now be added or changed after the control is created.

Improved the following commands to support expressions for their numeric parameters: Transform, FileReadLine, FileSelectFolder, FileSetAttrib, and FileSetTime. - March 8, 2005

Fixed "WinGet List", which was partially broken by v1.0.30. [thanks twwilliams]

Changed "WinGet List" to retrieve all windows on the system rather than the "last found window" when all four window parameters are blank.

Improved "lines most recently executed" so that when a waiting thread is resumed after being interrupted, the waiting command (e.g. WinWait) will be shown at the bottom of the list, which helps reveal "hung" threads. In addition, "lines most recently executed" now shows 400 lines rather than 200. - March 7, 2005

Fixed GroupDeactivate, which was partially broken by v1.0.30.

Fixed the lack of an error message when "Menu Delete/DeleteAll" failed on the submenu of a menu bar. [thanks Landvermesser]

1.0.30 - March 5, 2005

Fixed mouse hotkeys that use Win+Ctrl or Win+Shift as modifiers so that the Start Menu does not appear. [thanks Mythos]

Fixed "WinSet Style|ExStyle" to set ErrorLevel to 1 if the target window does not exist.

Changed "GroupClose All" to close hidden windows if DetectHiddenWindows has been turned on.

Improved ClipboardAll so that variables to which it has been assigned can be compared to each other as in this example [thanks Jerry]:
if ClipSaved1 <> %ClipSaved2% ; This must be an old-style IF statement, not an expression.expression.

Improved GUI ListBoxes with an option to set custom tab stops. [thanks jonny]

Improved Progress and SplashImage with a "Hide" option to have the window start off hidden. Use "Progress Show" or "SplashImage Show" to show it later.

Improved hotstrings with option letter "Z", which resets the hotstring recognizer after each triggering of the hotstring. The script will begin waiting for an entirely new hotstring, eliminating from consideration anything you previously typed. [thanks dennisbgoode]

Added WinSet Disabled/Enabled, which disables or enables a window.

Added ahk_group as a way to find window(s) matching any of the specifications in a window group. Example: IfWinExist ahk_group %MyGroup%. In addition, an entire group of windows can be minimized, maximized, restored, hidden, shown, or closed (e.g. WinMinimize ahk_group MyGroup). [thanks Rajat]

Added WinSet Region, which changes the display area of a window to be the specified ellipse, rectangle, or polygon. This allows parts of a window to be rendered invisible. [thanks Skrommmel]

1.0.29 - February 28, 2005

Fixed things like "Sleep %Seconds%000", which stopped working in v1.0.25+. [thanks Mayhem]

Fixed the Input command to correctly capture uppercase and control characters when not in "visible" mode.

Fixed key-up hotkeys to work on the neutral keys Control, Shift, and Alt. [thanks jonny]

Changed compiled scripts to always have their .exe file extension at the end of their names for the purpose of A_ScriptFullPath and default window titles. This also allows #SingleInstance to work even when the script is launched from the command line without its extension. [thanks Mythos]

Improved ClipWait to optionally wait for any data rather than just text and files.

An expression can be used in a parameter that does not directly support it by preceding it with a percent sign and a space or tab. This is most commonly used to access arrays [thanks JSLover]. Examples:
FileAppend, % MyArray%i%, My File.txt
MsgBox % "The variable MyVar contains " MyVar "."
Control, Choose, % CurrentSelection - 1

Added built-in variable A_MSec, which is the current time's millisecond. [thanks JSLover]

Added built-in variable ClipboardAll, which contains all data on the clipboard (such as pictures and formatting). This can be used to save and restore the clipboard to memory or a file as in these examples:

ClipSaved = %ClipboardAll%
Clipboard = %ClipSaved%  ; Done at a later time to restore the original contents.
FileAppend, %ClipboardAll%, C:\Saved clipboard.bin  ; Write the entire clipboard to a file.
FileRead, Clipboard, *c C:\Saved clipboard.bin  ; Restore from a file via the *c option. - February 23, 2005

Improved FileAppend and file-reading loops to be able to write text to standard output (stdout) by using an asterisk as the filename. Although such text can be redirected to a file, piped to another EXE, or captured by fancy text editors, it will not appear at the command prompt it was launched from (there is a workaround described at FileAppend). For example, the following would be valid if typed at a command prompt:
"%ProgramFiles%\AutoHotkey\AutoHotkey.exe" "My Script.ahk" >"Error Log.txt"

1.0.28 - February 22, 2005

FileAppend's text parameter may be omitted to create an empty file or update the timestamp of an existing file. [thanks JSLover]

The following change from v1.0.26 was undone because it is not needed: "Changed hotkeys such as "a & b::" to be seen as "~a & b::" if "~a::" also exists as a hotkey." In such a case, the hotkey "~a::" causes an A keystroke to be sent whenever A wasn't held down to modify another key such as B.

Improved SoundPlay to play standard system sounds (hand, question, exclamation, and asterisk). [thanks Mythos]

Improved the tray icon to optionally be unaffected by Pause and Suspend. The icon can be "frozen" by specifying 1 as the last parameter of the Menu command. Example: Menu, Tray, Icon, C:\My Icon.ico, , 1

Added ahk_pid as a way to find window(s) matching a process identifier (PID). Example: WinClose ahk_pid %VarContainingPID% ; Closes only the first matching window.

Added command SoundBeep, which emits a tone from the PC speaker. [thanks Tekl]

Added support for hotkeys that fire upon release of a key. Examples:
*LWin::Send {LControl down}
*LWin up::Send {LControl up}
^!r up::MsgBox You pressed and released Ctrl+Alt+R. - February 17, 2005

Fixed "Gui -Caption" (and perhaps others) to work even if the window is visible. [thanks Watcher]

Fixed GUI progress bars so that a starting position outside the range 0-100 is possible upon creation. [thanks kapege.de]

1.0.27 - February 15, 2005

Changed A_OSVersion to recognize Windows Server 2003 (as WIN_2003).

Post/SendMessage can broadcast to ALL windows via ahk_id 0xFFFF, as intended. [thanks Mythos]

If you're using Post/SendMessage to trigger menu items created via the Menu command, each ID is now 10,000 higher than it was before.

Improved RunWait to support OutputVarPID (like the Run command).

Added built-in variables A_IsCompiled and A_IsSuspended, which contain 1 if the script is running as a compiled EXE or is suspended, respectively. [thanks Mythos]

Added commanded OutputDebug, which sends a string to the debugger (if any) for display. [thanks procyon]


Fixed windows containing tab controls: previously, controls outside the tab control were sometimes invisible when the window was first shown. [thanks ranomore]

Changed "GuiControl +/-Options" to set ErrorLevel to 1 (failure) if none of the specified styles are allowed to be applied.

Increased the maximum number of GUI windows from 10 to 99, and the maximum number of controls per window from 1000 to 11000. - February 11, 2005

Fixed the PSPad (editor) installation script to create the AutoHotkey.ini file in PSPad's syntax vs. context folder (and two other minor fixes). [thanks RobOtter & beardboy]

Added #KeyHistory, which sets the maximum number of keyboard and mouse events displayed by the KeyHistory window. You can set it to 0 to disable key history. [thanks Mythos]

1.0.26 - February 10, 2005

Fixed A_LoopFileLongPath, which was truncating long filenames produced from short ones. [thanks deXter & jonny]

Fixed EnvDiv and "Transform Mod" to allow values between -1.0 and 1.0. [thanks Mythos]

Fixed hotkeys such as "a & b::" to be seen as "~a & b::" if "~a::" also exists as a hotkey, and vice versa. [thanks jonny]

Fixed unwanted interaction between hotkeys. For example, if "Capslock & A" and "MButton" are both hotkeys, clicking the middle button while holding down Capslock will turn CapsLock On/Off as expected.

Changed "MouseClick WheelUp|WheelDown" to ignore SetMouseDelay. This was done to avoid a slow-down of mouse wheel hotkeys, and also because a delay is undesirable in the vast majority of cases.

Improved PSPad's (editor) syntax and clip files in the Extras folder. [provided by GoGoGadgetScott & beardboy]

Improved SendMessage and PostMessage to support "ahk_id 0xFFFF", which is can be used to send HWND_BROADCAST messages to all windows in the system. [thanks Mythos]

Added a "fast" option to PixelSearch, which is up to 100 times faster for large search areas such as the entire screen. [code by Aurelian Maga]

Added command ImageSearch, which searches the screen for an image. [code by Aurelian Maga]

Added "WinGet Transparent" and "WinGet TransColor". Also added "WinSet Redraw", which refreshes a window by repainting it. [thanks Mythos]

Added the "WinSet Style|ExStyle" and "Control, Style|ExStyle" to change the styles of windows and controls not owned by the script.


Fixed "Gui +/-Disabled" and "Gui +/-AlwaysOnTop". In addition, it is no longer necessary to do "Gui Show" afterward. [thanks beardboy]

Fixed the inability to set a progress bar back to the default color. [thanks toralf]

Improved "Checked", "Disabled", and "Hidden" to recognize an optional 1 or 0 suffix. Example: Gui, Add, Checkbox, Disabled%Disabled?% Checked%Checked?%. [thanks MikeG] - February 5, 2005

Fixed hotstrings so that they don't interfere with AltGr dead keys (diacritics) such as tilde (~). [thanks zorglups & /Torben]

Added built-in variable A_LoopFileLongPath, which overcomes the limitations of A_LoopFileFullPath. [thanks Hugo]

Applying +AlwaysOnTop works even if the GUI window already exists. [thanks kmel]

"Gui Show" has been changed slightly to give more consistent results, especially for windows containing tab controls. - February 4, 2005

Applying options or styles to an existing GUI window avoids showing the window if it is hidden or minimized.

Added the following options to "Gui Show": Minimize, Maximize, Restore, NoActivate, NA, and Hide. [thanks kmel]

Added the following Gui window options: +/-Disabled, +/-AlwaysOnTop, and +/-LastFound. The LastFound option sets the window to be the last found window, allowing commands such as WinSet to operate on it even if it is hidden. - February 2, 2005

Fixed RunAs so that it can be used more than once. [thanks MikeG]

Fixed "Menu, MyMenu, Standard" to create the menu if it doesn't yet exist. [thanks Mythos]

Fixed "if Var" and "if (expression)" to consider non-numeric strings to be "true", as documented. [thanks Mythos]

Fixed built-in variables so that they can be referenced dynamically even if never referenced directly. Example: A_IPAddress%A_Index%

Changed ErrorLevel so that its previous value is available to commands that give it a new value. Example: StringReplace, OutputVar, ErrorLevel, EndKey:

Changed the linefeed character (`n) to be sent as Enter rather than Ctrl+Enter. This also causes "SendRaw %A_EndChar%" to work correctly when the user presses Enter to complete a hotstring. [thanks Andreas Borutta] - January 31, 2005

Fixed StringReplace (broken by v1.0.25) to work properly on large strings requiring more than 20 replacements. [thanks jordi]

Fixed GUI picture controls containing icons so that it is possible to change their options and styles via GuiControl. [thanks toralf] - January 30, 2005

Fixed the Input command to correctly capture uppercase characters from the Send command and Hotstring replacements.

Increased the maximum number of controls per GUI window from 500 to 1000.

Improved MouseGetPos with an optional mode that better supports MDI child windows. [thanks unnamed.ahk] - January 28, 2005

Launching a script should no longer switch you out of a full-screen application such as a game. In addition, there should be less disturbance/redrawing of the taskbar. [thanks Tekl]

Improved "Control Choose/ChooseString" to work on multi-select ListBoxes.

Added "ControlGet List" to retrieve the contents of a ListBox or ComboBox. [thanks Rajat & mallow] - January 25, 2005

Fixed hotstrings: Previously, when you pressed Enter to trigger a replacement, Ctrl+Enter was sent instead of Enter. [thanks Trinity & h67o]

Fixed slider controls so that a starting position outside the range 0-100 is possible upon creation. [thanks bahri] - January 24, 2005

Changed SplitPath to better support URLs. See SplitPath for details.

Added built-in variables true and false, which contain 1 and 0. They can be used to make a script more readable. Example: CaseSensitive := true - January 23, 2005

Fixed FileSelectFile's new multi-select option so that selecting a single file in a root folder such as C: will include a backslash after the folder name.

Fixed the fact that an expression such as Var:=" string " would obey AutoTrim while a more complex expression would not. By design, AutoTrim should never affect expressions. [thanks Ya-Cha]

Fixed expressions so that concatenating a reference such as Array%i% always treats Array%i% as an empty string, as documented. [thanks Ya-Cha]

Changed expressions so that performing an invalid operation -- such as dividing by zero or subtracting a string from a number -- causes only the affected portion to evaluate to a blank string rather than the entire expression.

Changed the installer to preserve the editor associated with scripts (rather than changing it to Notepad). Also, the open/run/compile context menu items for .ahk files have been corrected to work on a broader range of systems. [thanks corrupt]

Improved PixelSearch to optionally sort from right to left rather than left to right. If any of your scripts rely on PixelSearch always reporting "not found" for an inverted search rectangle, please adjust them accordingly. [thanks BoBo & SD2K]

Improved SplitPath to support URLs. [thanks BoBo] - January 19, 2005

Fixed crash when an expression compared a non-numeric string to the numeric result of an operation. [thanks unnamed.ahk]

Fixed := so that it's not necessary to have a space to its left. [thanks unnamed.ahk]

Fixed string concatenation such as Var = %Var% Test, which was partially broken by v1.0.25. This affected only concatenations that required one or more spaces to be trimmed from the left side due to AutoTrim being on. [thanks namazu(catfish)]

Fixed mouse button hotkeys that use only WIN or ALT as a modifier so that they do not display the Start Menu or activate the active window's menu bar, respectively. This problem occurred only in scripts that were not using the keyboard hook. [thanks Kijuto Riddle]

Fixed scripts that assign the mouse to be AltTab, ShiftAltTab, and other alt-tab actions so that they activate the keyboard hook, which is required for their proper operation. [thanks jonny]

Improved FileSelectFile with a easier multi-select option. Although the old multi-select option will continue to function as before, it has been marked obsolete in the help file due to the difficulty of parsing its results. [thanks 3tones]

Improved StringReplace with an option to store the number of replacements in ErrorLevel.

1.0.25 - January 12, 2005

NOTE: Although this release has been extensively tested, quite a few low-level changes were made. It is recommended that mission-critical scripts be re-tested prior to adopting this version.

Fixed file-pattern loops on Windows 95/98/Me so that A_LoopFileTimeModified/Created/Accessed are not blank. [thanks 3tones]

Fixed the following keys on Windows 95/98/Me to allow them to part of hotkey combinations: Delete, Insert, Home, End, PageUp, PageDown, and the arrow keys.

Fixed lines such as "If x = 5, Exit" so that the item after the comma is not recognized as a command. By contrast, "IfEqual, x, 5, Exit" will still recognize "Exit" as a command.

Changed "Transform, OutputVar, Pow" to yield a blank string rather than 0.00 when zero is raised to a negative power.

Changed compiled scripts so that the version resource shows the version number rather than being entirely blank. [thanks g4]

Changed FileAppend so that the file is automatically opened in binary mode if the text to be written contains any carriage return and linefeed pairs (`r`n). In other words, the asterisk option is put into effect automatically. However, specifying the asterisk when appropriate improves performance because the program does not need to scan for `r`n.

Changed file-reading loops so that the output file is not opened if nothing is ever written to it. This happens if the Loop performs zero iterations or if it never uses the FileAppend command. In addition, the file is automatically opened in binary mode if the Loop's first use of FileAppend writes any carriage return and linefeed pairs (`r`n). In other words, the asterisk option is put into effect automatically. These changes might break existing scripts that rely upon: 1) a zero-length file being created by the loop; or 2) the file's modification time being changed by the loop even if it didn't write any text to the file.

Removed runtime validation of numeric parameters (to help performance). Formerly, a command such as "SetKeyDelay %Var%" would produce a runtime error if Var contained something non-numeric. Most commands now treat non-numeric parameters as zero.

Improved the Progress command with options for starting position and having a range other than 0 to 100. [thanks ranomore]

Improved the Send command so that mouse buttons can be held down or released as in this example: Send {LButton down}

Improved the Sort command with an option to eliminate duplicates from the list. Also, the numeric option now treats items as floating point numbers rather than integers. [thanks Rajat]

Improved WIN and ALT hotkeys that use the Send command:
1) Fixed some situations that resulted in an unwanted appearance of the Start Menu.
2) The language bar's hotkey (LAlt+Shift) should no longer get triggered as an unwanted side-effect of the Send command. However, it can still be triggered intentionally with "Send {LAlt down}{Shift}{LAlt up}".
3) ALT hotkeys should no longer activate the menu bar of the active window. If you're using {AltUp}{Alt} anywhere in your scripts to make ALT hotkeys work better, those hotkeys should still work. However, they can be made to behave more consistently by removing {AltUp}{Alt}.

Improved performance of the following: 1) StringReplace "All" uses temporary memory (when appropriate) to greatly speed up the operation. See StringReplace for details and options. 2) Variable concatenation, such as Var = %Var%String, is at least 100 times faster. 3) Assigning to variables when AutoTrim is "On" is faster. 4) Case insensitive string searching is much faster, which affects StringGetPos, IfInString, "if var in <list>", StringReplace, and Input.

Added built-in variable A_LoopFileShortPath to file-pattern loops, which allows the 8.3 short path and name of a file to be retrieved. [thanks Rajat]

Added command FileRead, which reads all of a file's text into a variable (performs better than a file-reading loop).

Added support for expressions in commands that have numeric parameters, such as StringLeft. In addition, IF-statements may use complex expressions by including a parenthesis as the first character, e.g. if (X < Y + 10) and (Color = "Blue"). Finally, Var:=expression has been added to assign the result of an expression to a variable, e.g. Var := 100*X + 1/3. See Expressions for details about operators, string concatenation, and easier access to arrays. [thanks Joost Mulders]


Changed "Gui Show" to launch the GuiSize label only after showing the window and updating its title. [thanks ranomore]

Improved drag-and-drop to report (via ErrorLevel) the number of dropped files.


Latest Changes   |  Changes in 2004/2003  |  Pending Changes  |  Wish List Forum

Home | Download | Documentation | Changelog | Support | Forum | Wiki