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

Changelog for Years 2003-2004

1.0.24 - December 9, 2004

Fixed StatusBarGetText and StatusBarWait: If the system was under heavy load, sometimes they would give up too soon and set ErrorLevel. [thanks Anatoly Larkin]

Fixed compiled scripts so that the version resource is blank as intended. [thanks Titan]

Improved ControlClick to optionally click at a set of coordinates rather than a specific control.

Improved memory conservation: If a script requires its temporary memory area to be greater than 4 MB for an operation such as "StringReplace, Huge_Var, Huge_Var, `n, `r`n", that memory will be freed automatically when it has been unused for 10 seconds. The 10 second delay avoids the performance penalty of frequently freeing and reallocating memory. For example, a loop with thousands of iterations might need the memory for its entire duration.

Improved behavior of command line parameters on Windows NT/2k/XP so that: 1) more than 8 files can be dragged and dropped onto a .ahk script (if the drag-and-drop option was enabled during installation); and 2) .ahk files launched directly via shortcut or command line can receive parameters containing spaces if they are enclosed in double quotes. [thanks Tekl]

Improved FileCreateShortcut with options for: 1) using an icon other than the first; and 2) setting the launch state to minimized or maximized. If you have any scripts that use FileCreateShortcut with the Ctrl-Alt-Comma shortcut key, please ensure the comma is escaped. [thanks Holger]

Added command FileGetShortcut, which retrieves information about a shortcut (.lnk) file, such as its target file. [thanks Holger]

Added Rajat's syntax and keyword lists to the Extras\Editors\Syntax folder in the AutoHotkey folder. These files make it easier to create and maintain syntax definitions and clip libraries for various editors.

Added sub-command "Menu, Tray, Click, 1", which allows a single-click on the tray icon to activate the default menu item (normally a double-click is required). [thanks CarlosTheTackle]

Added sub-commands "Drive Lock" and "Drive Unlock". Locking a drive prevents its eject feature from working. [thanks RG]

Added the ability to sort a variable's contents in random order. [thanks GBeam]

Added support for Unicode text on the clipboard and in variables. See "Transform Unicode" for details. [thanks Tekl]

Added built-in variable A_YWeek, which is the current ISO 8601 year and week number. [thanks various]

Added the following built-in variables: A_Language, A_ComputerName, A_UserName, A_Desktop, A_DesktopCommon, A_StartMenu, A_StartMenuCommon, A_Programs, A_ProgramsCommon, A_Startup, A_StartupCommon, and A_MyDocuments.

Added command FormatTime, which transforms a YYYYMMDDHH24MISS timestamp into the specified date/time format.


CHANGES FOR GUI

Fixed radio buttons so that: 1) the g-label won't be launched just because the button receives keyboard focus; 2) the g-label is launched once rather than twice when navigating via the arrow keys; 3) focus is on the correct button when a radio group receives keyboard focus; and 4) back-to-back radio groups give their first radio button a tabstop. [thanks Gre & Jacques Bensimon]

Fixed tab controls so that keyboard focus always lands on the first control rather than the second one when the user clicks on a new tab. In addition, the Ctrl-PgDn/PgUp/Tab navigation keys will now work when focus is on a ComboBox. [thanks wkueting]

Fixed the "Limit" option for Edit controls, which was broken by v1.0.23. [thanks ranomore]

Fixed "GuiControl +/-Options" to allow the Check3 style to be added or removed on Checkboxes. Also, controls are always redrawn when their styles change. [thanks beardboy]

Changed ComboBoxes so that their g-labels (if any) are launched whenever the user changes the text in the edit portion of the control.

Improved Picture controls so that: 1) Icons and cursors can be loaded from .cur, .ani, .ico, .dll, and .exe files; and 2) Width and height can be specified when loading a new image via GuiControl. If any of your scripts use BackgroundTrans to make an icon transparent, add the word AltSubmit to that control's options. [thanks Rajat]

Added a method to set custom tab stops inside Edit controls. [thanks Jason Payam Ahdoot]

Added an "Invert" option for Slider, which reverses the low and high ends of the control. [thanks beardboy]

Added command "Gui, N:Default", which changes the default GUI window number of the current thread to N.

Added the GuiSize label, which is launched whenever a GUI window is resized, minimized, maximized, or restored.

Added support for drag-and-drop via the GuiDropFiles label.

1.0.23 - November 9, 2004

Changed compiled scripts to include a blank version info resource. To customize the version info of your compiled scripts, use a utility such as Resource Hacker (freeware) to edit the AutoHotkeySC.bin file. Note that ResHacker will corrupt compiled scripts, which is why only the AutoHotkeySC.bin file should be edited. [thanks Larl]

Improved the $ hotkey prefix to work on Windows 95/98/Me. It allows a hotkey to send itself, which makes it possible for a hotkey to conditionally perform its original/native-OS function.

Improved PixelGetColor and PixelSearch with an option to retrieve colors in RGB vs. BGR format.

Improved "Menu, Show" to accept an optional position for the menu. [thanks compuboy_r]

Improved the performance of the Hotkey command when it turns on/off a hotkey that is already in the right state. [thanks deguix]

Added sub-commands Style and ExStyle to WinGet, which retrieve a window's style and extended style. [thanks ranomore]

Added built-in variables A_ProgramFiles and A_WinDir for operating systems that might lack the corresponding environment variables.

Added sub-command "WinSet Bottom", which sends a window to the bottom of the stack; that is, beneath all other windows. [thanks AntonyB]

Added sub-command "WinSet, Transparent, Off", which completely turns off transparency on a window that was previously transparent. This may help performance. [thanks dijiyd]

Added sub-command "WinSet TransColor", which can make a window's background transparent on Windows 2000/XP+. This allows the creation of on-screen displays and other visual effects


CHANGES FOR GUI

Fixed "Gui Show": Sometimes the window wouldn't be shown until after the command that followed "Gui Show". [thanks Tekl]

Fixed Picture controls that have a border so that the size of the control doesn't increase slightly each time GuiControl is used to load a new picture. [thanks ILL.1]

Fixed Tab control so that when it is hidden or shown, the controls on its current page are also hidden/shown. In addition, some minor keyboard navigation issues were fixed. [thanks Nemroth]

Changed Tab controls so that enabling or disabling them will also enable/disable their sub-controls.

Changed Tab controls to use Classic Theme appearance on Windows XP or later, which makes their background color match that of their sub-controls. [thanks Gre]

Removed the 32 KB limit on the amount of text that can be contained in an Edit control. Windows 9x will be limited to 64 KB and other operating systems to as much as 4 GB. [thanks Bahri]

Improved screen drawing performance when switching pages in a Tab control.

Improved overall GUI performance, especially for windows with a large number controls.

Added wp+n and hp+n control positioning options, which use the width and height of the previous control.

Added BackgroundTrans option for Text, Picture, and GroupBox controls. It allows other controls behind them to show through.

Added built-in variables A_Gui and A_GuiControl, which contain the GUI window number and Control ID responsible for launching the current thread. [thanks Rajat]

Added sub-command "GuiControl Font", which changes a control's font.

Added control type Slider, which is a sliding bar that the user can move along a vertical or horizontal track.

Added control type Progress, which is a dual-color bar typically used to indicate how much progress has been made toward the completion of an operation.

Added control type Hotkey, which is a box that looks like a single-line edit control but instead accepts a keyboard combination pressed by the user.

1.0.22 - October 26, 2004

Fixed ToolTip failing to appear on Windows XP. [thanks Phi and /Torben]

Fixed the left mouse button when it is used as a hotkey: if it displayed a pop-up menu, the foreground window was seeing the button as stuck-down after the menu was dismissed. [thanks umek]

Improved SetKeyDelay with an optional delay between the down-event and up-event of each keystroke.

Improved GetKeyState, KeyWait, Input, and hotkeys to support an explicit virtual key such as vkFF. This is useful for keys that have no name and that produce no visible character when pressed. Unfortunately, all such keys keys tend to share the same virtual key code (FF); so if you have more than one of them, this method will not be able to tell them apart (except hotkeys, which should use the scNNN method described at the bottom of the key list page).

Improved FileMoveDir to support an optional rename mode, which provides "all or none" behavior. [thanks Tekl].

Added command "WinGet MinMax", which retrieves -1 if the window is minimized, 1 if it is maximized, or 0 if it is neither.

Added "WinGet ProcessName", which retrieves a window's process name. [thanks Wademan]

Added command Drive, which ejects/retracts the tray in a CD or DVD drive, or sets a drive's volume label.

Added command "DriveGet StatusCD", which retrieves the media status of a CD or DVD drive.

Added built-in variables A_ScreenWidth and A_ScreenHeight, which contain the width and height of the primary monitor, in pixels.

Added built-in variable A_AhkVersion, which contains the AutoHotkey version number.

Added command SysGet, which retrieves screen resolution, multi-monitor info, the dimensions of system objects, and other system properties. [thanks Gregory F. Hogg of Hogg’s Software]


CHANGES FOR GUI

Fixed Edit controls that have an explicit height (H) that is tall enough to be multi-line: word-wrapping is ON by default, as intended. [thanks Alfredo]

Fixed possible crash (never actually observed) when a window destroys itself, such as via a Quit button.

Fixed "Gui Show" so that the window's previous dimensions are retained if unspecified. [thanks lingoist]

Fixed "Gui Show" so that when called from the tray menu (and perhaps other times), the window will have keyboard focus. [thanks Tekl]

Slightly changed the height of a GroupBox when height is omitted or a row-count is specified. It should now conform better to the current font size. In addition, if no width is specified for a GroupBox, it will be slightly narrower.

Changed "GuiControl Choose" to automatically revert to the ChooseString method if the item-parameter is not numeric.

Improved ListBox to support an optional horizontal scroll bar via the word HScroll in its options.

Improved picture controls to support many additional image formats such as PNG, TIF, and ICO if the OS supports them. If your OS is older than XP (except Windows 95), you can add support by downloading the free Gdi+ extension from Microsoft: www.microsoft.com/downloads/details.aspx?FamilyID=6a63ab9c-df12-4d41-933c-be590feaa05a

Added command "GuiControl Text", which is the same as the set-contents method except for radio buttons and checkboxes, in which case Param3 is treated as the new text/caption even if it equal to -1, 0, or 1. [thanks Rajat]

Added new control type: Tab (SysTabControl32), which is a relatively large control containing multiple pages, each of which contains other controls.

1.0.21 - October 12, 2004

Fixed hotstrings: occasionally and randomly they would fail to activate. [thanks Jack Horsfield]

Fixed Progress command so that a custom bar color is obeyed on Windows XP+ rather than being overridden by the user's current theme [thanks Gre]. To instead use the current theme's appearance, leave the bar color unspecified.

Fixed ControlSend of modifier keys (e.g. capital letters and ^{end}) when a script targets one of its own GUI windows or when the keyboard hook is installed. [thanks beardboy & Gregory Punshon]

Fixed Send command when sending mouse clicks so that the correct CTRL/ALT/SHIFT/WIN key state is in effect. Also, ControlSend can no longer send mouse clicks since otherwise they would take effect in the window under the mouse cursor.

Fixed ToolTip so that the tip window can be displayed on non-primary monitors in a multi-monitor system. [thanks Jack Horsfield]

Changed PixelGetColor and Window Spy to retrieve colors in hexadecimal rather than decimal format, which makes it easier to visualize a color based on its blue, green, and red components. This change should not affect existing scripts. [thanks Bobo]

Improved Window Spy with a more useful layout and to show the text of the control under the mouse.

Improved the Input command to optionally recognize and transcribe modified keystrokes such as Control-A through Control-Z if they correspond to real ASCII characters. The following example recognizes Control-C:

Transform, CtrlC, Chr, 3  ; Store the character for Ctrl-C in the CtrlC var. 
Input, OutputVar, L1 M
IfEqual, OutputVar, %CtrlC%, MsgBox, You pressed Control-C.

Improved ControlSend so that if a script explicitly specifies modifier up and down events, such as {Alt down}f{Alt up} rather than !f, those events will be sent in a way less likely to interfere with the active window. Note: In prior versions, ControlSend did not correctly handle explicit modifier up and down events such as {Ctrl down} and {Ctrl up}.

Added Style and ExStyle (extended style) sub-commands to ControlGet.

CHANGES FOR GUI

Fixed checkboxes and radio buttons so that they will obey the specified text color even if an overriding Windows XP theme is in effect. However, as a side-effect the controls will revert to the classic-theme appearance whenever a custom text color is specified.

Fixed GuiControl so that it is possible make the contents of a control blank. [thanks Rajat]

Fixed cosmetic appearance of the default button. Previously, it sometimes took on the appearance of a normal button.

Changed the appearance of controls and windows throughout the application to use Windows XP visual styles if the current display theme allows them. [thanks Titan]

Changed DropDownList and ComboBox on Windows XP so that if the height is unspecified, the control's drop-list height will take advantage of the amount of desktop height available.

The recognition of the option words and letters for "Gui Add" is now more strict (but 99% of GUI scripts should be unaffected): options must be separated from each other by at least one space or tab, and any options that accept an argument (such as x30 for the x-coordinate) must be followed immediately by that argument, that is, with no whitespace in between.

Reduced the frame thickness around some control types (e.g. Edit) to a more traditional size.

All control types may now have an associated variable. This makes it easier to uniquely identify a control when using GuiControl and GuiControlGet.

Improved DropDownList, ComboBox, and ListBox to optionally store the position rather than the text of the selected item upon "Gui Submit" or GuiControlGet.

Added command "Gui Flash", which blinks the window's title bar and/or taskbar button. [thanks beardboy]

Added command "Gui +/-Theme", which allows controls to be created with Classic Theme appearance on Windows XP+.

Added the ability to change an existing control's options and styles via GuiControl.

Added multi-select option for ListBox via the word Multi in its options.

Added many additional control options and named styles. In addition, any unnamed numerical style may be applied, such as the ones in the styles table.

1.0.20 - September 30, 2004

Fixed commands "if var between/in/contains" so that the second item in the MatchList is not misinterpreted as a command if it happens to match one. [thanks Rajat]

Fixed the hotkey $Tab (TAB as an unmodified hook hotkey) so that it doesn't: 1) fire when Alt-Tab is pressed; 2) prevent Alt-Tab from working. [thanks antonyb]

Fixed MsgBox so that the timeout parameter can be contained in a variable. [thanks jordi]

Fixed SetTimer so that 10ms timers will be able to run every 10ms (rather than every 20ms) when SetBatchLines is at its default setting of 10ms.

Fixed A_Index so that it doesn't get periodically reset to 1 inside file-pattern and registry loops that recurse into subfolders/subkeys.

For anyone using Post/SendMessage to automate AutoHotkey itself: The IDs of the standard menu items in the tray and main window have been changed: they now begin at 65300 vs. 32789. Please adjust your scripts accordingly.

Version info (which can be seen in Explorer's file-properties dialog) is now omitted from compiled scripts. This change reflects the fact that scripts are owned by their authors and thus should have as little AutoHotkey association and branding as possible. An author can add custom version info by using a free utility such as ResHacker. [thanks Bobo & Titan]

Increased maximum length of menu names and menu items names from 100 to 260. In addition, menus should use slightly less memory now.

Improved the speed of the "Menu Add" command: Scripts whose menus collectively contain thousands of items should now be able to create new menu items at least 100 times faster.

Improved the Send command to support mouse button and mouse wheel [thanks Wolfgang Reszel (Tekl)]. If any of your scripts use "Send {LButton}" or similar (probably without effect), please adjust them accordingly.

Added configuration files for EmEditor and MED (contained in the Extras folder). [thanks Wolfgang Reszel (Tekl)]

Added a method to retrieve a list of all controls in a window. Example: WinGet, OutputVar, ControlList, A


CHANGES FOR GUI

Fixed cosmetic appearance of buttons when they are clicked rapidly. [thanks Rajat]

Fixed picture controls that are used as background for other controls: They will no longer steal mouse clicks unless they have an associated g-label. [thanks Rajat]

Fixed the Menu command: if it makes changes to a menu bar, those changes become visible immediately if the GUI window is visible. Also, changing a menu's color back to the default color should now work properly.

Increased maximum number of windows from 5 to 10.

(Might break existing scripts): If a radio group has multiple buttons but only one variable, that variable will assigned the number of the selected radio button (0 if none, 1 for the first, 2 for the second, etc.) [thanks Rajat] If you have any radio groups whose buttons do not all have variables, please adjust them accordingly.

(Might break existing scripts): By default, threads launched as a result of GUI action will now operate upon the window number where the action occurred. Previously, the GUI command would assume the number 1 if the window number was not specified. If you have any scripts that use multiple windows, please change them accordingly.

(Might break existing scripts): Scripts that contain the GUI command anywhere are automatically single-instance unless the #SingleInstance directive has been used to override that. In addition, GUI scripts are now instantly persistent rather than becoming so only after a GUI window is created.

Added "underline" option to the "Gui Font" command.

Added +/-Resize as an option to make a window resizable. Example: Gui, +owner +resize

Added xs, ys, and Section as options for "Gui Add". These options allow a window to be divided into sections, each of which can have its own rows and columns of controls. Note: when using a layout editor such as SmartGUI Creator, these options are typically of no use. [thanks Jack Horsfield]

Added built-in variable A_GuiControlEvent, which allows double-clicks to be detected for ListBox, Radio, Picture, and Text controls.

Added commands GuiControl and GuiControlGet, which perform various operations upon individual controls.

1.0.19 - September 16, 2004

Fixed hotstrings and the Input command to recognize characters produced with AltGr (Ctrl+Alt), such as the @ symbol. [thanks Tekl, jordi, and /Torben]

Fixed hotstrings so that caseless characters such as digits do not disqualify an abbreviation from being considered uppercase. For example, if "::pt1::pteranodon" is a hotstring and you type PT1 (all caps) the replacement will now be in all caps as it should. In addition, other minor changes to the "case conform" mode have been made.

Fixed the Menu-DeleteAll command so that it doesn't permanently disable any "sub-sub-menus" indirectly owned by a menu. [thanks compuboy_r]

Fixed command "Process Priority" so that the priority level can be contained in a variable. [thanks Rajat]

Fixed commands that turn on the keyboard hook (such as Input) so that they will not re-enable suspended hotkeys. [thanks jordi]

Fixed auto-centering of InputBox, SplashImage, Progress, and SplashTextOn: If the task bar was anchored on the left or top side of the screen, the centering was off by the thickness of the taskbar.

Fixed WinGetText and ControlGetText so that the retrieved text is limited to the maximum size of a variable, which defaults to 64 MB. [thanks hermitress]

Changed BlockInput so that input blocking is momentarily disabled whenever the Send command needs to simulate an ALT keystroke. Since there is a slight chance this will break existing scripts that attempt to send ALT while BlockInput is ON, please check and adjust accordingly.

Improved BlockInput to optionally come on automatically during any of the following commands: Send, SendRaw, MouseMove, MouseClick, and MouseClickDrag. [thanks beardboy]

Slightly improved the monitoring and buffering of hotkeys (especially joystick) during times when the script is displaying a dialog or is uninterruptible.

Added directive #MaxMem, which allows the maximum capacity of each variable to be changed from its default of 64 MB.

Added an option to Run/RunWait that avoids the display of the warning dialog and the termination of the current thread. [thanks compuboy_r and others who have asked]

Added an option to change the background color of a menu via "Menu, MenuName, Color, ColorValue" (has no effect on Windows 95/NT).

Added command KeyWait, which waits for a key or mouse/joystick button to be released or pressed down.

Added command "if var [not] contains MatchList", which is the same as using IfInString/IfNotInString except that multiple search strings are supported (any one of which will cause a match). [thanks whynot]

Added command GUI, which creates and manages windows and controls. Such windows can be used as data entry forms or as custom user interfaces.

1.0.18 - August 19, 2004

Fixed sticking modifier keys (CTRL, ALT, SHIFT, and WIN) -- at least in some cases. This should help prevent hook hotkeys from unexpectedly firing when the user isn't even holding down any modifier keys. The fix operates by correcting the hook's modifier state whenever it disagrees with what the OS says it should be.

Fixed mouse button hotkeys: If a script defines LButton as a hotkey, the script's own menus should now operate correctly. Similarly, if a script defines RButton as a hotkey and its subroutine uses "MouseClick, right", the tray icon should now respond correctly to a right-click as long as SetMouseDelay is at the default setting or lower.

Fixed support for diacritic and other characters, which was broken in v1.0.16/17. [thanks jordi]

Fixed some problems with neutral modifier keys (Shift, Control, Alt) that are used as both a prefix and suffix as in this example:
Shift & Capslock::MsgBox You pressed Capslock while holding down the either Shift key.
Shift::MsgBox You released either Shift key without having used it to modify another key.

Fixed "CoordMode Caret" so that it uses its own setting rather than that of "CoordMode ToolTip".

Fixed A_CaretX & Y so that they are always both blank if there is no active window or the caret position could not be determined.

Changed the Input command so that the user can toggle CapsLock/NumLock/ScrollLock during an invisible Input.

Improved the hook's handling of neutral modifier keys (ALT, CTRL, and SHIFT) to make them more specific to which key (left or right) was actually pressed. This is most likely to affect Windows NT4.

Added command "if var [not] between value1 and value2", which checks whether a variable's contents are numerically or alphabetically between two values.

Added command "if var [not] in value1,value2,...", which checks whether a variable's contents match one of the items in a list.

Added built-in variable A_ThisMenuItemPos, which is a number indicating the current position of A_ThisMenuItem within A_ThisMenu.

Added command Process, which performs one of the following operations on a process: checks if it exists; changes its priority; closes it; waits for it to close. [thanks AutoIt Team] In conjunction with this, the Run command has been enhanced to optionally retrieve the Process ID of a newly launched program. Also, a window's Process ID can be retrieved with WinGet.

1.0.17 - August 9, 2004

Fixed Ctrl-Alt-Del security screen and Win+L (lock the computer) to prevent sticking keys. Both were partly broken by v1.0.16. [thanks frk]

Fixed hotstrings for keyboard layouts that use dead keys -- such as acute (´), circumflex (^), and grave (`) -- so that the keyboard will continue to function properly. [thanks /Torben & Jordi]

Fixed auto-replace hotstrings so that end-chars reserved by the Send command, such as !{}, are sent as part of the replacement.

Fixed registry loops so that an entire root key can be recursively searched. [thanks sleepyy35]

Fixed command Suspend, which sometimes permanently disabled all hotstrings. [thanks Loneaussie]

Fixed commands Suspend and Hotkey so that they avoid resetting the state of hotkeys that the user is holding down. [thanks WhiteCloud]

Fixed the Input command so that a match-list contained in a variable will not be ignored if its first character is a comma. [thanks Rajat]

Changed the Input command's MatchList so that two consecutive commas results in a single literal comma. In this example, a single literal comma is included at the end of word1: "word1,,,word2".

Added command "Transform, OutputVar, deref", which expands variable references and escape sequences contained inside other variables. [thanks various]

Added built-in variable A_EndChar, which is the ending character pressed by the user to trigger the most recent non-auto-replace hotstring. If no ending character was required (due to the * option), this variable will be blank.

Added built-in variables A_CaretX and A_CaretY, which are the current X and Y coordinates of the caret (text insertion point).

1.0.16 - July 15, 2004

Possible script-breaking changes: Although 99% of scripts should be unaffected, this top section lists all the changes that might be a problem. I tried to get as many of them into this release as possible to minimize the need for this in the future.

Changed default BatchLines from 10 to 10ms, which makes lengthy operations -- such as loops that have many iterations -- run much faster. The large majority of scripts should continue to function properly. However, if you want 100% compatibility with the prior version of AutoHotkey, add SetBatchLines 10 to the top of any script that does not already use the SetBatchLines command.

Changed scripts that use hotkeys, hotstrings, or #Persistent so that #SingleInstance is automatically implied. Use #SingleInstance Off to override this.

Changed the Input command so that ENTER is seen as the more-appropriate linefeed (`n) rather than carriage return (`r). This affects the contents of the OutputVar and the MatchList. Please change your scripts accordingly.

Changed Run/RunWait so that they will launch non-EXE files (such as documents), using the default verb rather than "open". Since the default verb is usually "open", this shouldn't affect most existing scripts.

(normal changes below this point)

Fixed Run/RunWait of .lnk files (shortcuts). [thanks ealerner]

Fixed StringUpper/StringLower so that they work on accented letters and other letters whose ASCII value is above 127.

Fixed Progress so that the W (window width) option works again.

Fixed Shift+Win hotkeys that used the Send command: In some cases, extra shift key events were being generated, which interfered with the ability to use a hotkey two or more times in a row. [thanks Jabberwock]

Fixed ambiguity with `:: when it's used as as part of a hotkey rather than literally in a command. [thanks Rajat]

Fixed InputVars that dynamically resolve to the names of environment variables. Sometimes the value was not being fetched from the environment [thanks Samlii]. Example:
EnvVar = SystemRoot
StringTrimLeft, OutputVar, %EnvVar%, 0

Fixed the ALT key so that if it is itself a hotkey that fires on key-down, keys sent by the Send command will not be modified by the ALT key. [thanks Wade]

Fixed A_LoopFileDir to be blank for files contained in the root folder of a relative-path search.

Fixed the Input command so that having more than 1024 items in the match-list does not cause a memory problem. In addition, activating the Ctrl-Alt-Del security screen no longer causes it to think that CTRL and ALT are stuck down. [thanks frk and beardboy]

Changed the Input command so that Control-Backspace and other modified backspaces are ignored. Only plain backspace is used as an "undo" keystroke.

Changed custom menu items so that they cannot interrupt the OnExit subroutine (as documented). In addition, custom menu items now behave more like hotkeys in terms of buffering and their ability to interrupt other threads.

Increased max size of each variable from 16 to 64 MB (this does not increase the memory used by scripts). This can be made a configurable option if anyone needs it.

It is now possible to use a literal pair of colons by escaping it, e.g. `::

Scan code prefix keys are now possible, e.g. SC118 & Enter::MsgBox. [thanks Rajat]

Improved SplashImage:
- "Keep aspect ratio" can be achieved by specifying -1 for either ZW (object width) or ZH (object height). [thanks MikeG]
- The image is fully redrawn when you drag another window across it (prevents artifacts).
- The image does not "flash" while the user is resizing the window.

Improved ControlClick so that a specific X and Y coordinate within the control can be clicked. [thanks Beastmaster]

Added support for the AutoIt v2 command HideAutoItWin, which does the same thing as Menu, Tray, Icon|NoIcon

Added support for thread priority, which determines whether a thread can interrupt (or be interrupted by) other threads. The following commands support setting the priority: Hotkey, Menu, SetTimer, #Hotstring, and Thread (sets the current thread's priority). In addition, hotstrings can be individually assigned a priority when they are defined.

Added commands SendRaw and ControlSendRaw, which send keystrokes exactly as they appear rather than translating {Enter} to an ENTER keystroke, ^c to Control-C, etc.

Added built-in variables for month name (A_MMMM and A_MMM) and day name (A_DDDD and A_DDD). In addition, A_Year may now be optionally referred to as A_YYYY, A_Mon as A_MM, and A_MDay as A_DD.

Added built-in hotstrings and auto-replace. This is a fairly major feature and due to its variety of uses, it will probably be refined in the coming weeks based on your ideas and feedback.

1.0.15 - June 29, 2004

Fixed "Menu, MyMenu, Show" so that the menu can always be canceled by clicking outside of it. [thanks Rajat]

Fixed the Progress command so that a window will be created even if no options are specified.

Fixed Ctrl-Alt-Delete on Windows XP systems that have been configured to show the security screen instead of the task manager: The Ctrl and Alt keys should never be stuck down upon returning. [thanks frk]

Fixed auto-centering of InputBox window, which was off slightly due to not taking the task bar into account.

Relaxed the restrictions on the following commands so that they can run in their simplified parameter mode even when used in a subroutine called from their parent loop's body: RegRead/Write/Delete, FileAppend, FileGet/SetAttrib, FileGet/SetTime, FileGetSize/Version.

A compiled script can now be decompiled (if you know the password) via Exe2Ahk. [thanks Jon Bennett]

Renamed two options in the Progress command: In your scripts, rename ZC (bar color) to CB, and ZB (bar height) to ZH.

Improved the Progress command:
- Specify font name, size, weight, and color.
- Specify window background color. [thanks Rajat & beardboy]
- Specify bar thickness and color.
- Automatic window height (if unspecified).
- Better control over margins, border, and layout. [thanks Rajat]
- Have just a naked progress bar with no window visible around it.
- Omit the bar entirely to display text-only in a chosen font/color/size (a good alternative to SplashText).

Improved SplashTextOn and Progress so that their windows are not hidden when the main window is minimized.

Improved ToolTip so that more than one tooltip window can be created. [thanks Rajat]

Improved FileGetTime and FileGetSize so that they work on files that are in use, and so that they don't change the file's last access time.

Improved StringMid to optionally extract characters to the left of the specified position. [thanks Rajat]

Added text-to-HTML conversion via "Transform, OutputVar, HTML, Text". It translates characters whose ASCII values are above 127 to their HTML names (e.g. £ becomes &pound;). In addition, the four characters "&<> are translated to &quot;&amp;&lt;&gt;. Finally, each linefeed (`n) is translated to <br>`n

Added command ControlGetPos. [thanks Jerry]

Added command SplitPath, which separates a file name into its name, directory, extension, and drive.

Added command SplashImage, which displays a GIF, JPG, or BMP image with optional accompanying text.

1.0.14 - June 17, 2004

Improved Window Spy so that it always reports the correct control names in multi-pane (tabbed) dialogs. In addition, the control whose center is closest to the cursor will now take precedence when there are overlapping controls.

Improved MouseGetPos to optionally retrieve the name of the control under the cursor. [thanks jamestr]

Improved FileSelectFile to optionally present a Save button instead of an Open button.

Improved ToolTip so that it never blocks the mouse cursor when its coordinates are unspecified.

Improved the Input command to support shifted end-keys (typically punctuation marks such as :!?@). If you have any scripts that specify non-alphabetic end-keys that have shifted counterparts (e.g. semicolon and colon), they may need to be adjusted slightly.

Improved "if var is [not] type" to support the following types: lower, upper, and xdigit.

Added command line parameter /ErrorStdOut, which sends any syntax error that prevents a script from launching to stdout rather than displaying a dialog. This allows fancy editors such as Scite and EditPlus to jump to the offending line. The new command #ErrorStdOut does the same thing, but since it would have to be added to every script, it's usually better to set up your editor to use the command line parameter. [thanks Jack Horsfield & JdeB]

Added support for sending keys that have non-standard scan codes. Use Send {vkXXscYYY}. [thanks various]

Added command Progress, which displays one or more progress bar windows. [thanks AutoIt3 team]

1.0.13 - June 10, 2004

Fixed hook hotkeys that used a keyboard prefix but a mouse button suffix when the prefix was also a suffix [broken in v1.0.12 -- thanks jamestr]. Example:
$a::Send, a
a & LButton::Send, b

Fixed interference among multiple scripts using the hooks simultaneously.

Fixed Send {Asc nnnnn} so that it allows codes beyond 255 (Unicode) to be sent. [thanks Aj]

Changed: A script will only assume CONTROL/ALT/SHIFT/WIN are permanently down if it put them that way. [thanks jamestr & Jon]

Improved SplashTextOn so that its text is updated more quickly. [thanks Sds]

Improved the Send command's support for non-English letters, symbols and keyboards. If this applies to you and you notice any problems with this version, please let me know. The following are some of the characters supported: €‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
(Use Send {Asc nnnnn} to create Unicode characters whose ANSI values are greater than 255)

Improved the Send command by further limiting its ability to interfere with hotkeys that are being held down by the user to auto-repeat them (only helps hook hotkeys). [thanks jamestr & Jon]

Improved the Menu command to optionally use ErrorLevel instead of displaying runtime errors.

Added the ability to change the script's icon while it's running. This affects both the tray and InputBox icons. Use Menu, Tray, Icon, FileName [, IconNumber].

Added the ability to change the tray icon's tooltip via Menu, Tray, Tip [, NewText] [thanks beardboy]

Added built-in variables A_ThisMenuItem and A_ThisMenu, which correspond to the most recently launched custom menu item.

Added built-in variables A_Now and A_NowUTC, which contain the current time in YYYYMMDDHH24MISS format.

Added the following built-in variables, which contain the current states of their associated commands: A_TitleMatchMode, A_TitleMatchModeSpeed, A_DetectHiddenWindows, A_DetectHiddenText, A_AutoTrim, A_StringCaseSense, A_FormatInteger, A_FormatFloat, A_KeyDelay, A_WinDelay, A_ControlDelay, A_MouseDelay, A_DefaultMouseSpeed, A_IconHidden, A_IconTip, A_IconFile, and A_IconNumber.

Added command OnExit, which specifies a subroutine to run when the script exits. In addition, the built-in variable A_ExitReason has been added, which contains the reason the script is being asked to terminate (e.g. Logoff). [thanks beardboy]

Added command Sort, which arranges a variable's contents in alphabetical or numerical order.

Added the following menu features:

1.0.12 - June 1, 2004

Fixed the script compiler (ahk2exe) so that it will see FileInstall commands even if they are on the same line as an IF command as in this example: IfMsgBox, Yes, FileInstall, ... [thanks Rajat]

Fixed the ExcludeText parameter of all windowing commands. Previously, it didn't do much at all.

Fixed some problems involving rare usages of a key/button as both a hotkey prefix and suffix. In the following example, the "A" key did not repeat when held down. In addition, the ^a hotkey would fire on key-up when it should have fired on key-down:
~a & b::MsgBox "B" was pressed while "A" was held down.
$^a::MsgBox ^a

Fixed non-suppressed prefix keys that are also used as modified suffixes (rare): their up-events were being incorrectly suppressed as in this example:
~!LButton::ToolTip, clicked
~LButton & RButton::MsgBox The right button was clicked while the left button was held down. [thanks Rajat]

Fixed composite hotkeys that use a neutral (non-left/right specific) prefix such as "Control & LShift::". In addition, neutral suffixes are now supported, e.g. "AppsKey & Control::".

Fixed the wrong hotkey firing when a key was physically pressed or held down during a Send operation (very rare even then). This fix only works for hook hotkeys.

Changed for Windows NT4 only: CTRL/ALT/WIN/SHIFT are handled more specifically as left or right rather than neutral, which may improve support for some types of hook hotkeys.

Improved the Hotkey command to optionally toggle a hotkey to its opposite state (enabled or disabled). Some optimizations were also done to this command. [thanks beardboy]

Improved MouseGetPos to optionally retrieve the unique ID number of the window under the mouse cursor. This ID number can be used in the WinTitle parameter of all windowing commands by preceding it with the string ahk_id.

Added command WinGet, which retrieves the unique ID number for a window, or finds all the windows that match the specified criteria.

1.0.11 - May 25, 2004

Fixed FileSelectFile so that it doesn't change the script's working directory (%A_WorkingDir%). [thanks Jon]

Fixed SoundPlay, which was sometimes causing a script to hang during Exit or Reload [thanks jamestr & Larry Keys]

Fixed the fact that numbers with a leading zero would sometimes be interpreted as octal (base-8).

Fixed a rare sticking of WIN and ALT keys when more than one script was using the keyboard hook simultaneously.

Fixed a bug in parsing loops that occurred only when the delimiter list was empty but the omit-list was not. [thanks Beastmaster]

Fixed for Windows NT only: GetKeyState and the fact that the Send command wasn't releasing the hotkey's own modifiers when it should. [thanks beardboy]

Changed Loops so that a variable containing a floating point number can be used. Example: Loop, %MyFloat%

Updated the help file to indicate that the various control commands are affected by SetTitleMatchMode when searching by the control's name rather than its class + sequence number.

Improved MouseMove, MouseClick, and MouseClickDrag to optionally move the cursor relative to its current position. [thanks Rajat]

Added mode 3 (exact match) to SetTitleMatchMode. [thanks Jack Horsfield]

Added command SetWorkingDir, which changes the script's working directory (%A_WorkingDir%).

Added command WinGetClass, which retrieves a window's class name. [thanks compuboy_r]

Added command Transform, which performs miscellaneous math functions and tasks such as ASCII conversion and bitwise operations. [thanks Rajat]

Added command Hotkey, which creates, modifies, enables, or disables a hotkey while the script is running. [thanks various]

1.0.10 - May 11, 2004

Fixed all the windowing commands so that they can act upon windows that lack a title. [thanks Rajat]

Fixed: If a script had exactly one timer and it turned itself off during a Sleep or other delay, the script would sleep forever. [thanks beardboy]

Fixed ambiguity between variables and commands. The first word of a line such as the following will now be interpreted as a variable rather than a command: Input = String

Fixed #Persistent so that it works on all types of scripts.

Fixed "ControlGet, OutputVar, Line, 1" and "Control, Choose, 1".

Fixed some problems with mouse hotkeys in scripts that don't use the keyboard hook.

Fixed delays of length 0 to be as long as they were in v1.0.08. This affects commands such as SetWinDelay and SetControlDelay.

Fixed ControlSetText so that the Control parameter can be left blank.

Customized AutoScriptWriter for AutoHotkey. It now uses MouseClick vs. LeftClick, uses accent vs. backslash as its escape character, and saves files with the .ahk extension. [thanks Larry Keys]

Improved the tilde (~) hotkey modifier so that it works with prefix keys. For example, if "~RButton & C::Run, Calc" is a hotkey, the right mouse button will exhibit its normal function rather than doing nothing. [thanks Riccardo]

Improved IniDelete so that the Key can be omitted to delete an entire section. [thanks beardboy & Atomhrt]

Improved #SingleInstance to optionally ignore attempts to launch a script that is already running. [thanks Rajat]

Improved ListLines to show 200 vs. 50 lines and to show the elapsed time between lines. [thanks beardboy]

Improved MouseClick, MouseClickDrag, and ControlClick to support the 4th and 5th mouse buttons and the turning of the mouse wheel. [thanks skrommel]

Added built-in variable A_Cursor, which contains the name of the mouse cursor currently being displayed. [thanks AutoIt3 team & mgetlik]

Added built-in variable A_IsAdmin, which contains 1 if the current user has admin privileges or 0 otherwise. [thanks AutoIt3 team & jpk]

Added built-in variables A_IPAddress1, 2, 3, and 4, which contain the IP addresses of the computer's first four network adapters. [thanks AutoIt3 team & Rajat]

Added command CoordMode, which allows screen (absolute) vs. relative coordinates to be used for any of following groups of commands: Mouse (Move, Click, Drag, GetPos), Pixel (GetColor, Search), and ToolTip. Also, Window Spy now shows both relative and screen coordinates. [thanks to various]

Added command DriveGet, which retrieves various information about the computer's drives. [thanks AutoIt3 team & Rajat]

Added command TrayTip, which displays a balloon message window near the tray icon.

Added command Input, which waits for the user to type a string. [thanks to various]

Added support for joystick hotkeys. In addition, GetKeyState can retrieve the state of joystick buttons, axis positions, and other info. See the key list for details. [thanks compuboy_r & Rajat]

1.0.09 - April 27, 2004

Fixed FileSelectFile on Windows 95/98/Me/NT (it didn't work at all). [thanks Mike Griffin]

Fixed Run & RunWait on Windows 95/98/Me: They would sometimes incorrectly report a failure.

Fixed compiled scripts having their custom icons overridden in the tray on Windows 95/98/NT/2000. [thanks beardboy]

Fixed the tray menu checkmarks for Pause and Suspend, which didn't work in compiled scripts.

Fixed PostMessage/SendMessage so that they send to the specified control rather than always to the parent window.

Fixed hotkey subroutines that cause a runtime error so that they aren't disabled after the error.

Fixed a few specific types of scripts: they would sometimes halt without cause. [thanks Beastmaster]

Fixed InputBox so that ErrorLevel is correctly set even if multiple InputBoxes exist simultaneously and are dismissed out of order (rare).

Changed InputBox so that the buttons are the same size, which makes the window resize more evenly. [thanks beardboy & Rajat]

Removed the "Hook is already installed" and "Hook is not supported (Win9x)" warning messages because the hooks can be installed by more than one script without a problem.

Improved #SingleInstance with an optional FORCE parameter that skips the warning dialog. [thanks beardboy]

Improved Send so that:

Improved the mouse click commands to accept just the first letter of the button name (L/R/M). [thanks Rajat]

Improved the tray icon by having it recreated whenever Explorer crashes.

Improved InputBox with an optional timeout as well as a default string for the dialog's edit field. [thanks Beastmaster]

Improved FileSelectFile to optionally provide a default filename in the dialog's edit field. [thanks Beastmaster]

Improved FileSelectFolder to optionally provide an edit field for the user to type the name of a folder.

Improved parsing loops with built-in handling for CSV (comma separated value) format. [thanks Robert Yaklin]

Improved the security of compiled scripts, which closes some loopholes that allowed the source code to be viewed. [thanks Rajat]

Improved StringGetPos so that it is able to find a match other than the first. [thanks Robert Yaklin]

Added an index to the help file. [thanks Rajat]

Added syntax and cliptext files for EditPlus to the Extras folder. [thanks Mike Griffin]

Added directive #Persistent, which keeps a non-hotkey script running until ExitApp is encountered (useful for scripts that contain only timers or custom menus).

Added the ability to show/hide the tray icon while the script is running. [thanks beardboy]

Added an option that allows the main window of a compiled script to become accessible. [thanks beardboy]

Added support for window class names to all windowing commands. Window Spy now reports the WinTitle you should specify to use a window's class. [thanks Rajat]

Added commands ControlMove, Control, and ControlGet, which retrieve and change various attributes of a control. [thanks AutoIt3 Team & Rajat]

Added commands FileRecycle and FileRecycleEmpty. [thanks AutoIt3 Team & Rajat]

Added command ToolTip. [thanks AutoIt3 Team & Rajat]

1.0.08 - April 15, 2004

Fixed a small memory leak in Run and RunWait.

Fixed the Start Menu's launch of the main program: with older versions, it's possible that your AutoHotkey.ini script file (if you have one) was placed in the ShellNew folder of your Windows folder. If so, move it from there into the AutoHotkey directory in Program Files (or wherever you installed it).

Fixed the "Edit This Script" menu item, which disabled hotkeys if the script was already open for editing.

Fixed the fact that timers would sometimes make the tray menu and main menu slow to respond.

Fixed GetKeyState when retrieving the physical state of the mouse buttons: it was wrong whenever the mouse hook was installed without the keyboard hook. [thanks skrommel]

Fixed the tilde (~) hotkey prefix so that it works on all keys. [thanks Rajat]

Fixed the fact that the script would silently exit if a blank dynamic variable was used, such as in this example: %EmptyVar% = 100 ; [thanks Rajat]

Changed the tray icon to be closer to the intended green color on Windows 95/98/NT/2000.

Changed one of the types of buffering that was introduced in version 1.0.06 to default to OFF because it does more harm than good in most cases. See #MaxThreadsBuffer for how to re-enable this type of buffering and for an explanation. [thanks jamestr]

Improved #InstallKeybdHook and #InstallMouseHook to accept the optional word FORCE, which avoids the warning dialog that is normally displayed when the hook is already installed by another script. [thanks Rajat]

Improved ControlSend to optionally send directly to the parent window of a control. This is useful for programs such as Winamp 2.x (see Automating Winamp for an example). [thanks Rajat]

Added support for keyboards that have special keys not found on the key list. If your keyboard has such keys, you might be able to make them into hotkeys by using these steps (XP/2000/NT only). [thanks Rajat]

Added NumpadEnter to the key list since it can be made a hotkey on XP/2000/NT. [thanks Rajat]

Added support for hexadecimal integers. Use a 0x prefix to indicate that a number is hex (e.g. 0xF9). Hex integers can be used anywhere that a decimal integer is expected; for example, "Sleep, 0xFF" is equivalent to "Sleep, 255". You can also use SetFormat to make math operations store their results as hex, and to convert between decimal and hex. [thanks Rajat]

Added an option to the Installer that enables drag & drop onto script files. This option is disabled by default since it can lead to accidental launches. [thanks Rajat]

Added Rajat's TextPad syntax file and clip library to the Extras folder, which is accessible via the Start Menu. Use the included script to install these features. Hopefully, similar add-ons for other editors will be developed in the coming months (volunteers are welcome).

Added a "rename" option to the "Menu" command.

Added commands PostMessage/SendMessage.

Added command RunAs, which allows processes to be created under the permissions of a different user. [thanks Jonathan Bennett & Robert Yaklin]

Added command WinSet, which can make a window "always on top" or transparent.

1.0.07 - April 2, 2004

Fixed the Send command on Windows 95/98/Me so that keys such as {Down}, {Home}, and {PgUp} work properly. [thanks S_R]

Fixed the built-in variable A_ScriptDir so that .aut scripts see it as containing a final backslash (for compatibility). Also changed the .aut to .ahk converter so that this adjustment is made during the conversion. [thanks Rajat]

Fixed "Send, {}}" (send a literal right-brace). [thanks Rajat]

Fixed silent exit when a shifted reserved symbol such as # or ^ was defined as a hotkey. [thanks Rajat]

Fixed ShiftAltTab when it was assigned to a Numpad key. [thanks Rajat]

Changed the following commands so that they don't report runtime errors when given negative parameters: StringLeft, StringRight, StringMid, StringTrimLeft, StringTrimRight, ControlClick, and MouseClick. [thanks Rajat]

Changed the Suspend command so that hotkey subroutines whose first line is "Suspend, on" are not exempt from suspension. [thanks Jay D. Novak]

Changed MsgBox so that it will default to displaying "Press OK to continue" only when called explicitly with zero parameters. [thanks Rajat]

Changed the program's icons to the stylish ones provided by Rajat. It's hard to please everyone with a change like this, but hopefully most of you will consider them to be improvements over the drab originals (which basically just involved me drawing a big purple H).

Improved RegRead, RegWrite, and RegDelete so that they support a key's default value, which is displayed by RegEdit as "(Default)". Also, the root key names can now be abbreviated (e.g. HKLM). [thanks Rajat]

Added command "Menu", which allows you to customize the script's tray icon menu by removing existing items or adding new items. [thanks beardboy & Rajat]

1.0.06 - March 25, 2004

Fixed the following issues specific to Windows 95/98/Me [thanks Jay D. Novak]:

Fixed the tray icon so that it doesn't stay black when a new hotkey subroutine is launched while the current thread is paused. But it will go back to being black when the new subroutine finishes.

Fixed Gosub's and Goto's that jump to a label whose name is contained in a variable reference. In this example, the variable will now be resolved each time the line is run rather than only the first time: Gosub, %MyLabel%

Fixed the keyboard hook so that it is always auto-installed in response to #InstallKeybdHook and for scripts that contain only non-standard hotkeys such as "Capslock & e". [thanks bobhurt]

Changed the Installer to: 1) register the EXEs that come with the program so that you don't need to specify a full path when running them directly; 2) create its program group in All Users rather than the current user; 3) correctly remember the last installation directory (if you're installing on top of an older version).

Changed program startup for scripts that use the keyboard hook so that the current state of the CTRL/ALT/SHIFT/WIN keys is taken into account.

Changed the auto-execute section so that if it takes a long time to complete (or never completes), the default values for settings such as SetKeyDelay are put into effect after 100 milliseconds. Thus, it's usually best to make any desired changes to the default values at the top of the script. This is only important for scripts that contain hotkeys or timers.

Improved SetBatchLines to optionally accept a number of milliseconds rather than a number of lines. The millisecond method is recommended for scripts whenever speed and cooperation are important. For example, on most systems a setting of 10ms will prevent the script from using any more than 50% of an idle CPU's time. This allows scripts to run quickly while maintaining a high level of cooperation with CPU sensitive tasks such as games and video capture/playback.

Improved hotkey buffering during critical operations (such as Send), and when a hotkey's #MaxThreadsPerHotkey setting has been reached. In other words, in most cases the program will save up hotkey presses until they can be executed. As a side-effect, this makes holding down a hotkey (to auto-repeat it) more responsive. [thanks Jay D. Novak]

Improved the performance of hook scripts that have high or infinite BatchLines.

Added the AutoScriptWriter (macro recorder) to the main installer. I think there's a problem with the save button (which will hopefully be fixed soon) but it seems to work fine otherwise. [thanks Larry Keys]

Added command SetTimer, which is where most of the development time was spent over the past 10 days. Timers are useful because they run asynchronously, meaning that they will run at the specified frequency (interval) even when the script is waiting for a window, displaying a dialog, or busy with another task. Possible uses for timers include taking some action when the user becomes idle (as reflected by %A_TimeIdle%) or closing unwanted windows the moment they appear. There are many other potential uses.

1.0.05 - March 15, 2004

Fixed possible crash of the Exit and ExitApp commands.

Fixed Ctrl-Alt-Delete on Windows 2000/NT so that the Ctrl and Alt keys aren't thought to be down upon returning. [thanks Julian Doak]

Fixed GetKeyState so that the physical state of the mouse buttons is properly reported when the mouse hook is installed.

Fixed StringLower so that it accepts the optional Title-Case parameter as intended. [thanks beardboy]

Changed clipboard handling so that the program will keep trying to open the clipboard for 800 rather than 400 milliseconds before giving up and displaying a warning dialog. [thanks Jason Payam Ahdoot]

Changed: Variable names are now listed in alphabetical order in the main window. As a side-effect, performance of arrays is now better.

Changed FileAppend so that it optionally allows the file to be written in binary vs. text mode. As far as I know, the only consequence of this is that newline (`n) will be written as an isolated linefeed (LF) rather than a carriage return + linefeed (CR+LF).

Improved InputBox to allow a custom size and position to be specified. In addition, the window can now be resized by dragging its borders. [thanks David Nuttall & beardboy]

Added support for {SLEEP} to the Send command. Also added SLEEP as an allowed hotkey, though the Sleep button on some keyboards might not be compatible with this.

Added built-in variable %A_Index%, which is the number of the current loop iteration. The first iteration is 1, the second is 2, etc.

Added built-in variable %A_IdleTimePhysical%, which is similar to %A_IdleTime% except that it ignores artificial input (the kind generated by scripts and programs), and thus may be more useful for detecting whether the user is truly present. This variable will be the same as %A_IdleTime% unless the keyboard or mouse hook (or both) is installed.

Added command StringSplit, which divides a string into an array of substrings using the specified delimiters.

Added new type of loop: string-parse. It retrieves substrings (fields) from a string one by one (similar to StringSplit but uses less memory).

Added new type of loop: file-read. It reads the contents of a file (line by line) with higher performance than FileReadLine.

1.0.04 - March 6, 2004

Fixed Win-L (hotkey to lock the computer) so that the Windows key is not considered to be down when you log back in. [thanks Jack Horsfield].

Fixed the Reload feature: If a MsgBox or other dialog was displayed by the script at the time it was reloaded, the application would hang. [thanks Christian Ziemski]

Fixed auto-execute section, which is the top part of the script prior to the first hotkey label: If it had at least one normal (non-hotkey) label, in some cases the script's first hotkey label (if it had one) was executed as part of the auto-execute section. [thanks Robert Yaklin]

Improved SoundSetWaveVolume to accept +/- as a prefix. These prefixes adjust the volume up or down relative to its current level. In addition, the command now accepts an optional 2nd parameter to indicate which device to operate upon (for systems with more than one sound device).

Improved the following commands to greatly reduce the keyboard and mouse lag caused by a hook-script performing a long operation: FileDelete, FileCopy, FileMove, FileReadLine, FileSetAttrib, FileSetTime, Send, and ControlSend.

Improved StringLower/Upper to support converting a string to title case. For example, "GONE with the WIND" would become "Gone With The Wind".

Added remote registry support to registry-loops, RegRead, RegWrite, and RegDelete. Simply prepend the computer name to the root key, as in this example: \\workstation01:HKEY_LOCAL_MACHINE

Added built-in variable %A_TimeIdle%, which is the number of milliseconds since the system last received keyboard, mouse, or other input. This is useful for determining whether the user is away. This variable will be blank unless the operating system is Windows 2000, XP, or beyond.

Added command UrlDownloadToFile, which downloads a file from the Internet. [thanks Jonathan Bennett & Jason Payam Ahdoot]

Added command SoundGetWaveVolume, which retrieves the current WaveOut volume level.

Added commands SoundGet and SoundSet, which allow just about any setting of any sound device to be retrieved or changed. Examples include mute, microphone, master, synth, aux, and line-in.

1.0.03 - March 1, 2004

Fixed Send of {ASC nnnn} so that leading zeros in nnnn are not ignored.

Fixed RShift (the right Shift key): Hotkeys that involved it sometimes created an incorrect shift-state. [thanks Jesper James Jensen]

Changed the default HotkeyModifierTimeout from 100 to 50 to alleviate sticking modifier keys (CTRL/ALT/SHIFT/WIN). [thanks Jesper James Jensen]

Changed FileCopy for AutoIt2 (.aut) scripts so that it sets ErrorLevel to 1 rather than the number of files that could not be copied (improves compatibility).

Added command FileCreateShortcut, which creates a .lnk file. [thanks Jonathan Bennett]

Added support for registry enumeration, which allows the contents of a key to be retrieved (item by item) via a registry-loop. RegRead, RegWrite, and RegDelete have also been enhanced to optionally use the loop's current registry item whenever they are enclosed in a registry-loop. [thanks Robert Yaklin]

1.0.02 - February 26, 2004

Fixed a bug introduced in the prior version: In rare cases, you had to release and press down a hotkey's modifiers (Ctrl/Alt/Shift/Win) to get them back into effect after a Send operation. This is now unnecessary in most cases.

Changed: The program will now launch even if its tray icon cannot be created (perhaps due to running a shell other than Explorer). [thanks Ian Oliver]

Changed program startup so that the currently active window is not disturbed (it will stay active).

Improved the Send command to support characters 'ø' and 'Ø'. [thanks Jesper James Jensen]

1.0.01 - February 24, 2004

Fixed EnvSub's date-time math so that if a newer time is subtracted from an older one, the result will be reported correctly as a negative number rather than a large positive number.

Fixed a rare problem with naked modifier keys used as hotkeys. For example, if RControl (by itself) was a hotkey, sometimes the control key would get stuck down after a Send operation that involved the control key.

Fixed syntax error reporting: in rare cases such as Else If statements, the line above where the syntax error actually occurred was reported.

Added the built-in variable %0%, which contains the number of command line parameters that were passed into the script. This also improves compatibility with AutoIt2. [thanks BoBo]

Added command BlockInput, which prevents the user from doing anything with the keyboard, mouse, and maybe other input devices as well. [thanks Jonathan Bennett & beardboy]

1.0.00 FINAL - February 16, 2004

This seems like a stable version. I've had a lot of help testing it, so thanks to you all, especially Robert Yaklin. There are many more enhancements planned; you can expect the first in a series of new releases in about 2 weeks. Now on to the changes...

Fixed several problems with number recognition, mainly that numbers are now allowed to start with a plus sign or decimal point. For example, .95, -.95, and +.95 are now considered to be floating point numbers. [Thanks to Romano]

Fixed ListLines crashing when it displayed commands whose optional output variables were omitted.

Fixed a rare crash condition involving large variables being given a value that has zero length.

Fixed Reload on Windows 95. [Thanks to Robert Yaklin]

Fixed IF statements so that operators do not need to have whitespace. For example, this is now valid as intended: if var<>0

Fixed (again) shift key sticking when used with Numpad keys. Hopefully this is close to a 100% fix. [thx Robert Yaklin]

Fixed RegRead of REG_BINARY values: ErrorLevel is now set to 0 when successful.

Fixed RegWrite of a blank REG_DWORD value: It now writes a zero rather than a random number.

Changed SplashTextOn: Removed the menu bar from the window, which was unintentionally introduced in the previous version. Also, on most systems, the window will be a few pixels wider and taller so that the border is always correctly shown. [thx Jonathan Bennett and Robert Yaklin]

Changed SetFormat so that specifying 0 is the same as specifying 0.0. [thx Robert Yaklin]

Changed commands that activate a window, such as WinActivate, so that they won't hang if the previously active window or the target window is hung. Also, these commands will now try a more gentle approach first. You can skip the gentle approach by using #WinActivateForce, which maybe be useful in preventing task bar buttons from flashing when different windows are activated quickly one after the other.

Changed IniWrite and IniDelete so that they set ErrorLevel to 1 if there was a problem or 0 otherwise. For compatibility reasons, this does not apply to AutoIt2 (.aut) scripts.

Improved RegRead and RegWrite to fully support REG_MULTI_SZ. [thx Jonathan Bennett]

Improved ControlClick: It now clicks the exact center of the control, which might improve reliability for some types of controls. Also, another change was made (SetActiveWindow) that might further boost reliability. Finally, a new optional parameter was added that allows the mouse button to be held down or released. [thx Jonathan Bennett]

Improved Send to handle the following characters: ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ£ƒáíóúñѪº¿¬­½¼¡«» [thx Jonathan Bennett]

Improved Send and ControlSend so that any key can be held down or released. Example: Send, {tab down}{b down}{b up}{tab up}

Improved ControlSend so that the sending of the shift, control, alt, and win keys is more reliable. [thx Jonathan Bennett]

Improved FileRemoveDir to optionally delete recursively (similar to deltree). [thx Jonathan Bennett]

Improved FileCopy so that it sets ErrorLevel to the number of files that could not be copied (zero if all requested files were copied). The copy operation continues even if error(s) are encountered (such as target file(s) already existing when the overwrite flag is OFF).

Improved FileMove to support wildcards and to behave like FileCopy for ErrorLevel and continue-on-error. However, it no longer supports the moving of directories. Use FileMoveDir instead. [thx Jonathan Bennett]

Improved FileSelectFile by adding two optional parameters: Prompt (display instructions for the user) and Filter (for example: *.txt). As with all new parameters for old commands, they are not available in scripts whose file extension is .aut (for compatibility reasons).

Added FileCopyDir and FileMoveDir. [thx Jonathan Bennett]

Added built-in variable A_Tab, which contains a single tab character (similar to A_Space).

Added new types for "if var is <type>": integer, digit, alpha, alnum, and space.

0.2.25 BETA - February 9, 2004

I'm hoping this can be the final beta prior to initial release. All the test scripts run fine, including complex scripts that run for 72+ hours continuously without any memory leaks or other problems. The only significant fixes remaining are for ControlSend (uppercase vs. lowercase problems) and FileMove (wildcard support). If you get time over the next few days, please try to give this latest version a workout, especially the below changes and additions.

Fixed FileSelectFile: Sometimes the dialog would not be displayed, usually when doing a multi-select. [thanks to Steve Drown]

Fixed (hopefully) a hang-on-exit when the script is terminated while it is displaying a MsgBox or other dialog (rare even then).

Fixed #InstallKeybdHook and #InstallMouseHook so that they force the hooks to be installed even if there are no hotkeys that need them. This is useful to expand the scope of what the KeyHistory command shows.

Customized the AutoIt3 Window Spy to show which window text is available only when SetTitleMatchMode is in the "slow" mode. It also omits the mouse's desktop coordinates since they aren't used by AutoHotkey.

Changed the KeyLog command:

Renamed command ControlLeftClick to ControlClick so that other mouse buttons are supported. A simple search and replace of ControlLeftClick with ControlClick in your scripts should do the trick because the command assumes the left button if none is specified.

Improved the SHIFT-NUMPAD issue: SHIFT shouldn't get stuck down as often when used with any of the dual-state numpad keys. This is a compensation for the keyboard's driver-generated shift key events, which ensure that SHIFT isn't logically down whenever a numpad key is pressed or released. [thanks to Robert Yaklin]

Added command SetMouseDelay to change the delay that occurs after every mouse movement or click. Default 10.

Added directives #MaxThreads and #MaxThreadsPerHotkey. The latter defaults to 1, which means that new instances of a hotkey subroutine cannot be launched if that subroutine is already running. This default behavior is what most people would want since it helps prevent accidental double-presses. Thus, there's probably no need to change any of your scripts.

Added command FileInstall, which includes extra files when compiling a script.

Added #Include directive: By default, files are included only once even if multiple inclusions are encountered. Use #IncludeAgain to include a file more than once.

Added menu bar to the main window for convenient access to features such as viewing variables, lines, hotkeys, and key history.

0.2.24 BETA - February 1, 2004

Changed (again) math operations that involve impure numbers (e.g. 123abc) so that they conform to AutoIt2's behavior: Strings that start with a number are that number for the purpose of the calculation, e.g. 123abc is considered to be 123. Strings that do not start with a number are considered to be zero for the calculation, e.g. 123 + abc = 123. This change does not affect the behavior of IfEqual, IfGreater and IfLess: They will still compare strings alphabetically if either one is not purely numeric, which is slightly different from AutoIt2.

Added syntax to support determining whether a variable contains a pure number, floating point number, or time. Example:
if var is [not] number
if var is [not] float
if var is [not] time
{
...actions to take...
}

0.2.23 BETA - January 31, 2004

Fixed math operating on numbers that had trailing spaces: If a variable contained something like "123 " (i.e. space at the end) it would be considered non-numeric when math was performed on it, thus resulting in the variable being made blank. Sorry if that messed up anyone; the prior release is what broke it.

0.2.22 BETA - January 30, 2004

Fixed for Windows 95: Retrieving environment variables should work now. The problem was caused by Win95's undocumented buffer size limit in GetEnvironmentVariable(). [Thanks to Robert Yaklin]

Fixed RWIN (the right windows key): When used with a hook-hotkey, it might have caused the Start Menu to appear.

Removed an unintended 10ms delay during the launch of every hotkey [introduced in v0.2.20].

Changed math operations (EnvAdd/Sub/Mult/Div) so that the output variable is made blank if either of the inputs is not purely numeric. In addition to making flawed scripts fail in a more consistent way, this behavior can be used to quickly determine whether or not a variable is purely numeric.

Improved RegRead and RegWrite to support REG_BINARY. [As with so many other things, thanks to Jon, the AutoIt author]

Improved the handling of ALT keys: if either of them is used as both a prefix (modifying other hotkeys) and a suffix (is itself a hotkey whose action fires when the key is released), it doesn't have the side-effect of invoking a menu on the active window. Strangely, this was never a problem on my system until today when some mysterious change occurred making it obvious this adjustment was needed.

Added support for floating point: Any number containing a decimal point is considered to be such. Any math operation involving at least one floating point number will produce a floating point result. In addition, the Random command has been improved to optionally generate floating point numbers. Note: integer math is still used whenever floating point numbers aren't involved because testing reveals that scripts with math intensive loops run over 5 times faster with 64-bit integers vs. floating point numbers (tested on Pentium II and Athlon XP).

Switched from 32 to 64-bit integer math. 32-bit is only about 40% faster than 64-bit for scripts running intensive math loops on Pentium IIs and Athlon XPs. But for real-world scripts, the difference is negligible, so the greater flexibility seems worth the cost. 64-bit also allows %A_TickCount% and DWORDs read from the registry to be correctly reported as positive, as well as enabling the retrieval of the exact number of bytes in files larger than 2 gigabytes.

Added command SetFormat to allow floating point numbers to be stored in a format other than the default (e.g. with blank padding, 0-padding, or a different number of decimal places).

Added Explorer rightclick >>New >>AutoHotkey Script.

0.2.21 BETA - January 26, 2004

Fixed a Loop bug introduced in the prior version: If a Loop was directly beneath an IF or ELSE (i.e. not enclosed in a block), the flow of execution would be wrong, usually resulting in parts of the script being erroneously executed twice. [thanks to Steve Drown]

Fixed the custom icon feature of the Ahk2Exe script compiler.

Variable names may now contain the following punctuation (previously, only underscore was allowed):
# _ @ $ ? [ ]

Documented the fact that MsgBox supports having a default button other than the first (256 = 2nd, 512 = 3rd).

Added the ability to compare, add to, and subtract from dates and times. This is done via an optional 3rd parameter for EnvSub and EnvAdd, which can be either Seconds, Minutes, Hours, or Days (or just the first letter of each of these). The date-time format is YYYYMMDDHH24MISS, which is used by all date-time commands. Example:

var1 = 20050126
var2 = 20040126
EnvSub, var1, %var2%, days
MsgBox, %var1%  ; The answer will be 366 since 2004 is a leap year.
var1 =  ; Make it blank so that the below will use the current time instead.
var1 += 31, days
MsgBox, %var1%  ; The answer will be the date 31 days from now.

0.2.20 BETA - January 21, 2004

The first draft of the help file and the installer are finally done. They're included in the current release. [Thanks to Robert Yaklin for his help with the installer.] The installer will associate .ahk files with the installed AutoHotkey.exe, rather than any old version you may have.

Fixed a bug introduced in 0.216 that prevented #HotkeyModifierTimeout from working correctly. Scripts that didn't have the keyboard hook installed would not properly compensate for keys the user was physically holding down during the Send command.

Fixed RegDelete so that it allows the 3rd parameter (ValueName) to be omitted. If omitted, the entire specified subkey will be deleted.

Fixed script compiler (Ahk2Exe) crashing when given a custom icon. However, the custom icon feature still doesn't work. Hopefully it will be working for the next release.

Removed the GroupCloseAll command. Instead, use "GroupClose, A"

Changed IfWin[Not]Active and WinWait[Not]Active so that they set the Last Found window. [Thanks again to Robert]. If any of your scripts use the Last Found Window feature, there's a small chance they'll need to be changed in light of this.

Changed the default WinDelay to 100 vs. 250, and the "default" DefaultMouseSpeed to be 2 vs. 10 (i.e. the mouse will move faster by default). AutoIt2 (.aut) scripts still use 500 as their default WinDelay, but now use 2 vs. 1 as their default mouse speed (since Jon has said that values less than 2 sometimes don't work with MouseClickDrag). If anyone thinks these may be too aggressive, let me know.

Improved MsgBox with smart comma handling: Commas do not need to be escaped (`,) anymore except when using the command's timeout feature.

Improved the KeyHistory command: It will now show the script's own generated keyboard events in the window (rather than nothing) when the keyboard hook isn't installed.

Improved RegRead by eliminating the 2nd parameter (ValueType) whenever the command is given only 4 parameters. When given 5 parameters (i.e. the old style), the 2nd parameter -- which is not used and is present only for backward compatibility with AutoIt2 -- can be left blank.

Improved the responsiveness of the program (tray menu, main window, etc.) when SetBatchLines is very high or infinite. This also reduces keyboard and mouse lag to negligible levels if such scripts use the keyboard or mouse hook.

Improved FileSetAttrib and FileSetTime so that they optionally recurse into subfolders. Although all subfolders are recursed into, even if their names don't match the wildcard pattern, the attributes of the subfolders themselves are not changed unless OperateOnFolders is 1 and the folder name matches the pattern (*.* matches all).

Improved file-loops by adding an automatic "recurse into subfolders" option and more.

Added command SetControlDelay. This is just like SetWinDelay except it defines the delay that will occur after every control command that changes a control, namely ControlClick, ControlFocus, and ControlSetText. These commands are somewhat unreliable due to their nature; this delay seems to alleviate that. It defaults to 20 (milliseconds). In older versions, the value of SetWinDelay was used for these commands.

Added command SoundPlay. In addition to .wav files, it may be able to play .mp3, .avi, etc. depending on what features are installed on your OS.

Added ++ and -- operators, which add or subtract 1 from the target variable. Examples: count++, ++count, count--, --count

Added support for arrays (AutoIt2 style). This was done by allowing the name of a variable to be resolved during runtime, rather than exclusively at compile-time as it was before. In other words, commands that expect the name of a variable (with no enclosing %%) now allow that variable name to contain references to other variables. Example:

; Write to the array:
i = 0
loop, 5
{
    i++
    Random, array%i%, 1, 100  ; Put a random number into each element.
}

; Read from the array:
i = 0
loop
{
    i++
    StringTrimRight, element, array%i%, 0
    if element =
        break ; The end of the array has been reached.
    MsgBox, %element%
}

0.219 BETA - January 12, 2004

Fixed the Suspend command so that when suspension is turned off, all hotkeys are re-enabled. Previously, hotkeys handled by the hook were sometimes left disabled.

Changed the Suspend command so that the keyboard and mouse hooks are never removed if the corresponding directives (#InstallKeybdHook and #InstallMouseHook) are present in the script.

Changed InputBox: For non-AutoIt2 (.aut) scripts, it now sets ErrorLevel to 1 and the output variable to the value entered if the user presses the Cancel button. For AutoIt2 scripts, the behavior is the same: ErrorLevel is not changed and the output variable is set to blank whenever the user presses Cancel, even if text was entered.

Changed FileDelete to set ErrorLevel to be the number of files that could not be deleted (if a wildcard pattern was given).

Changed the KeyHistory command so that the filename is specified in the second parameter. So now it works this way:

KeyHistory  ; same as before (display short log in window)
KeyHistory, on, c:\KeyHistory.txt  ; Turn on logging, optionally specifying the file to log to.
KeyHistory, off  ; Turn off logging.
KeyHistory, toggle [, filename]  ; Toggles to the opposite state (on or off).

Improved the performance of KeyHistory when it logs to a file by having it leave the file open rather than closing and reopening it for every key/mouse event. This should also reduce wear & tear on the drive. The only disadvantage is that viewing a log file that is open for logging might show contents that are out-of-date due to file buffering. To work around this, temporarily turn off logging before viewing the file.

Improved the performance of Run and RunWait by having them attempt CreateProcess() prior to ShellExecute(), rather than the other way around. I believe CreateProcess() is much faster.

Removed the commands FileToggleHidden and FileSetDateModified. See below for their replacements.

Added the following commands. Click a link for details:
ControlGetFocus
FileSelectFolder
FileGetAttrib
FileSetAttrib
FileGetTime
FileSetTime
FileGetSize
FileGetVersion

0.218 BETA - January 7, 2004

Added a script compiler (makes an EXE from a script) by popular demand. It was a lot easier than I thought, thanks to Jon's (AutoIt author's) open & modular coding style. It's available on the download page. Note: Presently, .aut scripts are not supported because there's no way for the compiled script to figure out whether to run in AutoIt2 mode (backslash as escape char) or AutoHotkey mode ([`] as escape char). So if necessary, first auto-convert your .aut file to .ahk by renaming it to "whatever.aut.ahk" and then running it with AutoHotkey.exe.

Added support for command line parameters becoming script variables. The command line format is:
AutoHotkey.exe [switches] [Script Filename] [Script Parameters]
CompiledScript.exe [switches] [Script Parameters]
Switches can be zero or more of the following:
/f or /force -- Launch unconditionally, skipping any warning dialogs.
/r or /restart -- Indicate that the script is being restarted (this is also used by the Reload command, internally)
Script Filename can be omitted if there are no Script Parameters. If omitted, it will run (or prompt you to create) AutoHotkey.ini in the current directory.
Script Parameters can be any strings you want to pass into the script. Any parameter containing spaces must be enclosed in double quotes. Like AutoIt2, the script sees them as the variables %1%, %2%, and so on.

Added command #NoTrayIcon. Put it anywhere in a script to disable the showing of a tray icon. If you use this for a script that has hotkeys, you might want to bind a hotkey to the ExitApp command. Otherwise, there will be no easy way to exit the program (without restarting the computer or killing the process). Example: #x::ExitApp

0.217 BETA - January 5, 2004

Fixed variable assignment (SetEnv and the new style, var = value) to properly handle escape sequences. Lines such as this should now work properly: result = %result% %color% `%`n

Fixed the shift key getting stuck down in rare cases when Numpad hotkeys invoke the Send command to send the shift key. The fix is basically a workaround for the fact that the OS, driver, or BIOS generates physical shift-key events to ensure that Numpad keys that have a dual-state (Numpad1-9 and Dot) never have their keystrokes occur while the shift key is down. Thanks once again to Robert Yaklin for his help on tracking this down.

Fixed Numpad hotkeys (e.g. NumpadEnd) that have a counterpart on the main keyboard (e.g. End) so that the counterpart key does not fire the hotkey.

Added commands IniRead/Write/Delete:
IniRead, OutputVar, Filespec, Section, Key, Default (value to return if key not found)
IniWrite, Value, Filespec, Section, Key
IniDelete, Filespec, Section, Key
Note: For compatibility reasons, IniRead does not support the last parameter if the script is of type .aut. Also, if this last parameter is omitted, OutputVar will be set to ERROR if there was a problem. This mirrors AutoIt2's behavior. Finally, none of these commands set ErrorLevel; this mirrors the behavior of AutoIt2 and 3.

Added command EnvUpdate, which according to the AutoIt3 docs: "Refreshes the OS environment. Similar effect as logging off and then on again." The command sets ErrorLevel to 0 to indicate success or 1 otherwise. Note: Due to the nature of this feature, there is a slight chance that keyboard and mouse events will lag (be delayed) while the command is running if the keyboard/mouse hooks are installed.

Added a built-in variable A_Space which contains a single space character. This avoids the need for a workaround to get a variable to contain a space. Example:

String = String with spaces
IfInString, String, %A_SPACE%
MsgBox, A space was found.
; But to assign a naked space to a variable of your own, be sure to turn off AutoTrim so that the assignment won't remove all leading and trailing spaces:
AutoTrim, off
MySpace = %A_SPACE%

Added the Edit command, which opens the current script for editing, or activates an existing Editor window if it finds one it thinks may have the file open based on its window title. This command is the same feature as selecting "Edit This Script" from the tray menu.

Added the Pause command and corresponding tray menu item. Unlike Suspend -- which disables hotkeys entirely -- pause will freeze the currently running subroutine (if none, pause will have no effect). The allowed values for the command's first parameter are ON, OFF, and TOGGLE (change to the opposite state). If the first parameter is omitted, it will default to TOGGLE just like the Suspend command. New hotkeys can still be launched while the script is paused, but when their subroutines finish, the underlying interrupted subroutine will still be paused. The "Pause, off" command will unpause only the most recently paused subroutine. Each subroutine can be paused independently of the others. The color of the tray icon changes to black whenever the script's current subroutine is in a paused state.

Improved the Suspend feature:

Improved the behavior of #SingleInstance scripts when the user attempts to run another instance: The user is now prompted for whether to keep the original instance or replace it with the new one.

Improved PixelSearch by making the output variables optional. In addition, an optional parameter has been added, which if present is a number between 0 and 255 (inclusive) to indicate the allowed number of shades of variation in either direction for the intensity of the red, green, and blue components of the color. This can be helpful if the color you're looking for isn't always exactly the same shade. Example:
PixelSearch, FoundX, FoundY, %X1%, %Y1%, %X2%, %Y2%, %Color%, 10 ; Allow 10 shades of variation.
Note: If you specify 255 shades of variation, all colors will match. The default is 0 shades.

0.216 BETA - December 29, 2003

Fixed a bug introduced in a prior version that prevented new hotkeys from firing if the script had a MsgBox or other dialog displayed on the screen.

Fixed PixelSearch to accept negative coordinates without complaining.

Changed the behavior of scripts so that the default values of things such as KeyDelay and WinDelay will go into effect for every newly launched hotkey subroutine. You can use the auto-execute section -- which consists of the commands at the top of the script that occur prior to the first hotkey label -- to change any of the defaults that you wish. So now, when you press a hotkey, the subroutine will always start off fresh with the default values of the following:

Added StringUpper and StringLower. Example: StringUpper, OutputVar, InputVar
Note: As with all such commands, InputVar and OutputVar are allowed to be the same variable.

Added the following built-in variables:

0.215 BETA - December 18, 2003

Fixed a possible crash in variable assignments that involve more than one source. e.g. statements such as clipboard = %clipboard%%SomeVar%

Fixed a possible crash-on-startup bug introduced in version 0.212 in conjuction with "else if" support.

Fixed clipboard being hogged (held open) in rare cases such as displaying the clipboard with SplashTextOn.

Fixed PixelGetColor to accept negative coordinates without complaining.

Fixed a very obscure issue where a non-suppressed mouse hotkey such as "~LButton::" would cause that particular AutoHotkey instance's tray menu and main window context menus to behave strangely.

Added command SoundSetWaveVolume, which sets the playback volume for files such as WAV and MP3. For example:
SoundSetWaveVolume, 50 ; Number between 0 and 100, inclusive.

Added command EnvSet, which is needed because unlike AutoIt2, AutoHotkey does not store its variables in the environment. This is because performance would be worse and also because the OS limits env. vars to 32K (AutoHotkey vars, including the clipboard, are essentially unlimited in size). ErrorLevel is set to 1 if there was a problem or 0 otherwise. For example:
EnvSet, AutGUI, Some text to put in the variable.

Note: An EnvGet command is not necessary because dereferencing a blank or undefined variable will automatically trigger that behavior. For example, in the following line, the value of the ProgramFiles variable (if undefined in the script) will be fetched from the environment:
TargetFile = %ProgramFiles%\Something\setup.ini

Disabled the feature that jumps to the proper line in notepad or metapad when a syntax error is found (if the script is already open in such an editor) because it doesn't seem to work reliably. If any of you were using it, let me know. Later, I plan to add support for an external script such as "RunWhenSyntaxError.ahk" that will automatically be run if a script launch fails due to a syntax error.

Improved PixelSearch to set ErrorLevel to 2 if there was an error other than "color not found". It still sets it to 1 if the color isn't found, or 0 if it is.

0.214 BETA - December 16, 2003

Added command WinMenuSelectItem (similar to AutoIt3 command). The menu search terms are not case sensitive (i.e. File->Save is the same as file->save) and the use of ampersand (&) to indicate the underlined letter in a menu item is not necessary. For example:

WinMenuSelectItem, Untitled - Notepad, , File, Save
WinMenuSelectItem, Untitled - Notepad, , 1&, 3&  ; Same as above but uses menu item position rather than text.

Note: The position method exists to support menus that don't contain text (perhaps because they are pictures of text rather than actual text?) Position 1 is the first menu item (e.g. the File Menu). Menu separator lines count as menu items for the purpose of determining the position of a menu item.

Added command ControlFocus. For example:

ControlFocus, (ControlName or ControlClassNN), WinTitle, WinText, Excludetitle, Excludetext

Note: As with all commands that take WinTitle/Text, you can specify the letter A as the title to use the active window, or leave all 4 window parameters blank to use the window most recently found by commands such as IfWinExist and WinWait.

Improved the following commands so that they set ErrorLevel to 1 if there was any kind of non-critical error (such as a nonexistent window or control) that prevented the command from completing:

ControlSend
ControlClick
ControlSetText
ControlGetText
StatusBarGetText
WinGetText

Improved StatusBarWait so that it sets ErrorLevel to 2 if there was some kind of error (e.g. the target window doesn't exist or doesn't have a status bar). But as before, ErrorLevel will be set to 1 if the command times out or 0 if the status bar becomes a match for the specified text.

Improved the KeyHistory command to support logging keys & mouse buttons to a file. It still works the old way (displaying the KeyHistory window) if no parameters are given. But it behaves differently if given a first parameter. Examples:

KeyHistory, C:\KeyHistory.txt  ; Specify the filename and turn on file logging.
KeyHistory, off     ; Turn off file logging.
KeyHistory, on      ; Turn on file logging to the filename specified by a prior use of this command.
KeyHistory, toggle  ; Toggle logging (set it to the opposite of its previous state).

The keyboard or mouse hook must be installed for logging to occur. You can force them to be unconditionally installed by adding the following lines to your script:
#InstallKeybdHook
#InstallMouseHook

The log file a tab-delimited text file with the following fields:
Virtual key code (hex)
Scan code (hex, the first digit is 1 if the key is an "extended" key)
Seconds elapsed since prior event
flag (h = hook hotkey, s = suppressed (hidden from system) by hook, i = ignored by hook)
down/up (d or u)
Key name
Active window title (only present if it has changed from the prior event)

Sample log file:

59	015	15.0	 	u	Y	C:\
5B	15B	0.1	 	u	Left Windows
9E	000	1.1	 	d	WheelDown
9F	000	0.4	 	d	WheelUp
A4	038	0.4	 	d	Alt
09	00F	0.1	 	d	Tab
09	00F	0.2	 	u	Tab
A4	038	0.1	 	u	Alt	 Untitled - Notepad
A3	11D	1.4	 	d	Right Ctrl
26	148	0.1	h	d	Up	C:\
26	148	0.1	s	u	Up
A3	11D	0.0	 	u	Right Ctrl
A3	11D	1.6	 	d	Right Ctrl
2E	153	0.1	h	d	Delete
A3	11D	0.0	i	u	Right Ctrl
A4	038	0.0	i	d	Alt
73	03E	0.0	i	d	F4
73	03E	0.0	i	u	F4
A4	038	0.0	i	u	Alt
A3	11D	0.0	i	d	Right Ctrl

Note: Each keystroke generates two lines, a down and an up.

0.213 BETA - December 15, 2003

Fixed hotkeys that have LWin/RWin (windows key) as a modifier and that use the Send command: In some cases, the windows key was incorrectly put into the down position after the Send. [Thanks to Robert Yaklin for discovering this.] On a related note, you do not need to use the Sleep command to allow the user time to release the modifier keys (Ctrl/Alt/Shift/Win) with hotkeys that use the Send command. The Send command knows to change the modifiers to what they need to be for every key that will be sent.

Fixed hotkeys that override Windows hotkeys such as Win-E and Win-R so that the Start Menu doesn't appear when the Windows key is released.

Added PixelGetColor and PixelSearch, which mirror AutoIt3's commands of the same name. These can help with detecting the state of non-standard controls and with the automation of full-screen apps such as games. See docs for details.

Minor: Undid the previous change mentioned below having to do with "escape chars at the end of a line or that escape a whitespace char". To conform to AutoIt2 behavior, escape chars that don't escape anything are now removed (i.e. made invisible).

Minor: Changed WinClose to use the WM_CLOSE vs. SC_CLOSE (alt-F4) method so that it's like AutoIt2 and AutoIt3. The new method is a little less gentle to the target window than the previous method, but it's likely to work on more types of windows.

There's now an automated way to convert a .aut file to .ahk so that you can take full advantage of the new features (some new features -- such as the new parameters available in some commands -- are disabled in .aut scripts to improve compatibility with AutoIt2). The conversion will simply make the escape character ` instead of \. This is harder than it sounds due to the precise ordering of escape sequences in each line, which is why you just can't do a Search & Replace in a text editor. This automated way should take care of all the details:

  1. Append a .ahk to the end of an existing .aut file, so that filename now ends in ".aut.ahk"
  2. Run this file with AutoHotkey, which, rather than than running the file, will create a new file in the same directory that ends in "-NEW.ahk". This is the converted version. The original version will be unchanged.
  3. If you were using #EscapeChar in the script, remove it from the converted version.

After converting a script from .aut to .ahk, the main problem areas to check for are commands that accept additional parameters in .ahk files but not in .aut files. If you used any non-escaped commas in the parameter that was formerly the last parameter (in AutoIt2) but is now not the last parameter, those commas will be interpreted as delimiters. For example:

Msgbox, 0, Title, Text, with, commas

In the above, the string "Text, with, commas" would be interpreted as the last arg by AutoIt2. But since AutoHotkey supports a new parameter for the timeout of the MsgBox, the string "with, commas" would be interpreted as the timeout value (which would be caught as a load-time error in this case). Here is another example:

WinActivate, title, text with literal comma, here.

The above would be a problem after conversion; The string "here." would be interpreted as the new "exclude title" parameter.

Here is a list of commands that both accept new parameters and that might be problematic:

Note #1: Even though they accept new parameters in .ahk files, commands such as IfWinExist are not troublesome with respect to the above because the program can tell the difference between the AutoIt2 and AutoHotkey methods. The WinWait family of commands should also not be a problem.

Note #2: As always, AutoHotkey can run most AutoIt2 (.aut) files directly, without the need to convert to a .ahk file.

0.212 BETA - December 8, 2003

Added support for a command being on the same line as its ELSE. Examples:

if x = 1
    Gosub, a1
else if x = 2
    Gosub, a2
else IfEqual, x, 3
{
    Gosub, a3
    Sleep, 1
}
else Gosub, a4  ; i.e. Any command can be on the same line with an ELSE.
 
; Also OK:
IfEqual, y, 1, Gosub, b1
else {
    Sleep, 1
    Gosub, b2
}
 
; But this is illegal:
if x = 1 {  ; Invalid: This would compare X to the string "1 {" instead of treating { as the start of a block.
    Sleep, 1
    MsgBox, test
}
 
; A legal alternative:
IfEqual, x, 1, {
    Sleep, 1
    MsgBox, test
}

The main use of the above is for "else if" ladders, which may increase the script's readability.

Relaxed the conditions that triggered the warning dialog "More than X hotkeys have been received in the last Y milliseconds" (thanks to CyberSlug for the idea) so that keyboard auto-repeat feature can be used on most systems without triggering a warning. In addition, you can customize this behavior by using the following directives:

#HotkeyInterval 2000 ; This is the default value (milliseconds).
#MaxHotkeysPerInterval 50 ; This is the default value.

Care should be taken not to make the above too lenient because if you ever inadvertently introduce an infinite loop of keystrokes (via a Send command that accidentally triggers other hotkeys), your computer could become unresponsive due to the rapid flood of keyboard events. Example of an infinite loop of keystrokes: ^c::Send, ^c

If you want to do something like the above without triggering an infinite loop add a $ to the hotkey definition (e.g $#y::). The $ tells it to use the hook for the hotkey, which is smart enough to know not to treat our own SEND commands as a source for hotkeys. Using the hook has at least a couple of disadvantages, which is why it isn't always used: 1) Only one instance of the program at a time should have the hook installed; 2) It may very slightly impact system performance.

Improved the ~ (tilde) hotkey prefix (see docs) so that it works with modified hotkeys (i.e. those that require CTRL, ALT, SHIFT, or WIN to be pressed) as well as unmodified ones. The only exception is mouse buttons, which must be unmodified to be "non-suppressed".

Made all windowing commands support the letter A as the first parameter to indicate that the active window should be used. Even though the result is always "known" ahead of time for commands such as WinWait, WinActivate, IfWinExists, and IfWinActive (since by definition the active window is active and exists), this change makes things more consistent. For example, the first parameter can conditionally resolve to the letter A at runtime, thus increasing flexibility. In addition, this change also allows the Last Used Window to be reset easily such as in this example:

#y::  ; Win-Y
Run, notepad
WinWait, Notepad
WinActivate  ; Activate the window last found.
; ...Let's say some time has passed and we're no longer sure which window is the "last used" one.
WinActivate, Notepad
WinWait, a  ; ***** Set the "last used" window to be the active window.
; Now we can do commands such as the below without specifying the window (better performance too):
WinMinimize
ControlSend, , Some text that will appear in notepad even if it isn't active (ControlSend can use the "last used" window; in addition it sends to the top-most control by default).
WinMaximize
WinActivate
return

New command:

#HotkeyModifierTimeout 100  ; value in milliseconds, default 100

The above only has meaning if the script does not have the keyboard hook installed (you can see if your script uses the hook via the KeyHistory command). This is because the hook can keep track of which modifier keys (ALT/CTRL/WIN/SHIFT) the user is physically holding down. For example:

^!a::Send, abcdefg

The above SEND requires that CTRL and ALT be released so that the keys get sent properly. After the SEND completes, if the hook is installed the program knows whether it can safely push back down CTRL and ALT. But if not and the SEND finishes more than HotkeyModifierTimeout milliseconds after the hotkey subroutine began, the modifier keys will not be restored and you will have to release and press them again if you wish to use them to modify the same (or another) key again. Note: You can set the value to be -1 so that it never times out, or 0 so that it always times out. Also, you can ensure that the keyboard hook is installed, thus making the above unnecessary, by adding the line #InstallKeybdHook anywhere in the script. Reducing KeyDelay (via SetKeyDelay) to 0 or -1 may also help if the keyboard hook isn't installed, since SEND will run more quickly.

Fixed unjustified warning dialog ("Another instance of this program already has the keyboard or mouse hook installed") that occurred sometimes when using the "Reload This Script" function. This was apparently caused by OS being slow to unload the prior instance & mutex from memory. The program now does not display this warning if a currently-running script is being restarted.

Added $ as a hotkey modifier symbol (e.g. $^c): It results in the use of an alternate (more powerful) method to implement the hotkey. Use this if the default method doesn't work properly (due to its recursive use of the Send command, for example). In technical terms, this method uses the keyboard hook rather than RegisterHotkey() to implement the hotkey.

Fixed GetKeyState so that all keys work. Previously, keys with NumPad equivalents, such as Delete and End, didn't work.

GetKeyState now supports an optional 3rd arg that can be the letter T (state of toggleable key such as CapsLock) or P (physical state of key). If the arg is omitted or blank, the logical state of the key will be returned. The logical state should be one that the OS and the foreground app believe the key to be in, whereas the physical state is whether the key or mouse button is physically down or up. For example:

GetKeyState, state, CapsLock, T  ; Will set "state" to be D if CapsLock is ON or U otherwise.

Currently the "physical" state is always the same as the logical state if the hooks aren't installed, because Windows XP (and probably NT/2k, but perhaps not Win9x) doesn't seem to properly implement the following code. If anyone has a workaround, I'd love to hear it:

#define IsPhysicallyDown(vk) (GetAsyncKeyState(vk) & 0x80000000)

The keyboard hook is installed to support left/right-modifier specific hotkeys, wildcard hotkeys, SetNum/Scroll/CapsLock, AlwaysOn/Off, to override Windows Explorer hotkeys such as Win-E, and for a few other purposes. It is not unconditionally installed because it very slightly impacts system performance and is also only not designed to be used by more than one script at a time (though you can force it). You can determine which hooks (mouse and keyboard) are installed by assigning the KeyHistory command to a hotkey.

You can force the hooks to be installed unconditionally by adding either or both of these lines anywhere in the script:

#InstallKeybdHook ; this is the hook needed to maximize reliability of modifier restoration with the Send command (see above)
#InstallMouseHook ; this would probably only be used if you wanted to see mouse button events in the KeyHistory, since it will automatically be installed if you are using any mouse hotkeys.

For the Send command, changed the name of ControlDown/Up to CtrlDown/Up so that it matches AutoIt. Also added LCtrl and RCtrl as alternate valid key names for LControl/RControl for use with hotkeys as well as commands such as Send and GetKeyState.

Fixed SEND so that if modifier keys are sent that happen to be part of the hotkey definition itself, those modifiers are restored after the Send is complete. This resolves issues where if KeyDelay was greater than -1, you would have to release the modifiers and press them down again to get the same hotkey to fire again after the first time. For example:

^+0::Send, {SHIFTDOWN}a{SHIFTUP}

Another thanks to CyberSlug for discovering this problem. See other sections above for further details.

Changed ControlSend so that {ASC nnnn} items are ignored, since the OS does not support this feature when sending keystrokes directly to a window or control.

Fixed the Send command, which was sometimes sending an incorrect scan code (usually inconsequential).

Minor change: A modifier's key-up hotkey action (if it has one) won't fire if that modifier was used to modify any mouse button click (since Ctrl-LeftClick, for example, is a valid native OS feature that most users would never want to sacrifice).

Minor change: Escape characters that occur at the very end of a line or that "escape" a whitespace character are now considered to be literal. This should be more like AutoIt2. Example:
var1 = this character is now literal -->`

Tip: C-style section comments can be used, but the symbols must appear at the beginning of a line to be recognized:

/*
...
(section that is commented out)
...
*/

0.211 BETA - December 1, 2003

Fixed the Reload command and the corresponding tray menu item to work with script filenames that contain spaces.

Added GetKeyState. For example:

GetKeyState, OutputVar, LButton

It sets OutputVar to be U (for up), D (for down), or blank if the state couldn't be determined for any reason. The key name can be virtually any of the keys listed in the documentation, including mouse buttons (at least under WinXP, and they will probably work on other OSes as well).

Added a new optional parameter to MouseClick. If this last parameter is D the button will be held down until it is released by the user physically clicking it or via another action in the script. If this last parameter is U, the button will be released (even if it wasn't down before, an up-event will still be sent).

Added new hotkey definition symbol ~ (tilde) to indicate that this hotkey's native function shouldn't be suppressed (hidden from the system) when the hotkey fires. For example, in the below, the mouse button click will be sent to the active window when it normally wouldn't be:

~RButton::Sleep, 1

Note: Special hotkeys that are substitutes for alt-tab always ignore this setting.

Changed commands that click the mouse (MouseClick, LeftClick, etc.) so that the clicks themselves cannot trigger hotkey subroutines. This prevents potential infinite loop conditions if a script were to send mouse events that happen to be valid hotkeys.

Changed slightly how hotkeys that are combinations of keyboard and mouse work: Normally if the prefix key of that pair modifies any other key (even something that isn't a hotkey) its key-up action won't fire (if it has one). This has been changed so that mouse buttons are the exception. For example:

Numpad0 & Numpad1::MsgBox, test1  ; Numpad0 is now a prefix key that is handled by the keyboard hook.
Numpad0::MsgBox, test2  ; Now Numpad0 is both a prefix AND a suffix (a suffix because it has its own action)

Under the old method, if Numpad0 was pressed down and then a mouse button clicked, the Numpad0 action would not fire when Numpad0 is released, as it normally would. Under the new method it does, but only if the combination of Numpad0 and that mouse button isn't a hotkey (since by default, the key/mouse events that comprise a hotkey are always hidden from the system unless the ~ symbol, described above, is used).

0.210 BETA - November 19, 2003

Added command "suspend". It's just like the tray menu item of the same name. The first parameter can be either blank (to toggle the state to the opposite setting), ON (to suspend hotkeys), or OFF (to resume). Note: Any hotkey whose subroutine's first line is the "suspend" command will not be subject to suspension. This allows any such hotkey to turn off the suspension.

0.209 BETA - November 19, 2003

Improved Run and RunWait so that they attempt CreateProcess() (the AutoIt method) if the normal ShellExecute() method fails to work. This should make things more flexible and more like AutoIt. Note: Internally, the ShellExecute() method is always attempted first because I believe it has more capabilities, such as the ability to run documents, launch URLs, and execute system verbs such as "properties" (see below).

Run and RunWait now support the following system verbs: properties, edit, print, find, explore, open, and print. For example:

Run, properties c:\autoexec.bat  ; Bring up the properties dialog for this file.
Run, edit %A_SCRIPTFULLPATH%  ; Perform the associated "edit" action for this file (if it has one).

Added #Delimiter command. This can be used to change to the default (comma) delimiter, which is used to separate commands and parameters from each other. Note: It cannot be a space, tab (since some editors replace tabs with spaces), or a char that it already in use for another special purpose. For example:

#delimiter . ; Make the delimiter a period rather than a comma.

Fixed tray menu item "Edit This Script" (again) because it still wasn't working right.

Enabled tray menu item "Suspend". This function prevents new hotkey subroutines from launching (but Alt-Tab hotkeys will still work). In other words, pressing a hotkey will have no effect at all; it won't even be seen by the system. For example, if Control-C is a hotkey, it would do nothing rather than its normal "copy" behavior. Note: "Suspend" will not halt any subroutines that are already running.

0.208 BETA - November 17, 2003

FIXES:

Fixed the tray menu item "Edit This Script".

Fixed compatibility-check for AutoIt2: some of the default AutoIt2 behaviors weren't being used.

Fixed WinWait commands: Exclude-Text and Exclude-Title weren't being handled correctly.

Turned off debug logging: If you were running an older version, you may have a small text file "C:\AutoHotkey SetForegroundWindowEx.txt", which you can safely delete after upgrading to this version.

Changed StringReplace so that it doesn't trim whitespace from the result, which matches AutoIt2's behavior.

CHANGES:

Included the VC++ project in the source code ZIP file.

Changed the default for .aut (AutoIt2) scripts to "DetectHiddenWindows, off", so that things are more like AutoIt2. This is now the default for all scripts. From what I can tell, unlike AutoIt2, AutoIt3 always detects hidden windows. Since this can sometimes cause problems with window matching and distinctness, the AutoIt2 method seems to be a better default.

Changed the SetTitleMatchMode command. In addition to supporting the traditional modes of 1 & 2, the command now supports the words fast and slow (e.g. SetTitleMatchMode, slow). The default is fast, which is what AutoIt2 uses, whereas AutoIt3 uses the slow mode because it can "see" more text for certain windows. The fast mode performs significantly better, which may help the speed of scripts that that do a lot of windowing commands. The slow mode can be used to ensure full compatibility with AutoIt3 and its Window Spy (the Spy is included with AutoHotkey). I'm thinking of modifying the Window Spy so that it indicates which text of a window is available only in the "slow" mode.

Window finding reliability: Made the "slow" TitleMatchMode more reliable by increasing the timeout to 5 seconds because some windows are sluggish about checking their message queues (e.g. during long disk operations), and thus very slow to cough up their window text.

In this version, by default, multiple instances of the same script can be launched. If you wish to limit a script to a single instance, use the #SingleInstance directive described below.

ADDITIONS:

DriveSpaceFree (gets the free space [in MB] for a drive). For example:
DriveSpaceFree, OutputVar, C:\

SetAutoTrim, on/off (defaults to on): When you assign a value to a variable, this controls whether whitespace is automatically trimmed from the left and right of the string. For this purpose, whitespace consists of spaces and tabs, but NOT newlines (carriage returns). Thus, I believe the "on" setting yields the same behavior as AutoIt2 in this regard.

StringGetPos now supports a new optional last parameter. If the parameter is the letter R, the search goes from the right to left, so the last occurrence is found rather than the first.

ControlSetText: Derived from AutoIt3's function of the same name. For example:
ControlSetText, ControlName, Some new text, wintitle, wintext, exclude-title, exclude-text

Note that some or all of the last four parameters can be omitted. If all of them are omitted, the window found by the most recent IfWinExist, IfWinNotExist, or WinWait will be used. This behavior is the same for almost all of the other windowing commands too.

#AllowSameLineComments: To increase compatibility with AutoIt2, scripts that end in .aut are normally not permitted to have same-line comments (e.g. Run, notepad ; this is a comment). Add the line #AllowSameLineComments to the top of your script to allow them.

#SingleInstance: Specifying this anywhere in a script will prevent new instances of that script from being launched once there is already one running. Instead, you will be prompted for whether to close the existing instance. Note: You do not need to use "on" or "off" with this command.

#CommentFlag: Allows you to change the comment-flag from the default of semicolon to a string of your choice. The string can be up to 15 characters long. For example:
#CommentFlag // ; Change to C++ style.

#EscapeChar: The escape character is normally accent "`" but this allows you to change it to AutoIt2's escape character (backslash) or some other char of your choice. Note that by default, scripts that end in .aut will use the backslash for their escape char.

#DerefChar: The deref char is normally % (e.g. Sleep, %SleepTime%). You can change it to some other character with this.

TIPS

The first comma can always be omitted for any command, e.g. MsgBox This is the text of the Msgbox (single-parameter mode).

You can use the CapsLock keys as a new "modifier", similar to the windows key, without changing its native function (WinNT/2k/XP only, currently). For example:
CapsLock & A::run, notepad
CapsLock & S::run, calc

0.207 BETA - November 12, 2003

Fixed StringMid: It was previously able to read beyond the length of the input variable.

Disabled the auto-restore-on-resume feature -- which restores the foreground window that a suspended thread was working with -- because it probably causes more trouble than it's worth.

0.206 BETA - November 11, 2003

Fixed scripts randomly hanging (sleeping indefinitely): caused by the thread's main timer having been killed when it shouldn't be.

Fixed WinWait-type commands that would behave unexpectedly if a new hotkey subroutine was launched while the command was waiting for the timeout to expire: the new subroutine was overwriting a buffer that was still needed by the old subroutine.

Fixed: tray menu behaving strangely if a modal dialog, such as MsgBox or InputBox, was on the screen.

Fixed the REPEAT command, which was causing an infinite loop if its first parameter was a dereferenced variable rather than a literal number.

0.205 BETA - November 10, 2003

Initial release.

 


Latest Changes   |  Changes in 2005   |  Pending Changes  |  Wish List Forum

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