Version AHK_H v1

© 2019 Hotkeyit, Steve Gray, Chris Mallett, portions © AutoIt Team and various others

Software License: GNU General Public License

AutoHotkey_H New Features [home]

Commands / Functions
#DllImportCreate an alias function for a dll function that allows to omit parameters and use default values.
It can also load pure machine code supplied as hex string, see example.
#WarnContinuableExceptionDo not warn on continuable exception, continue execution like main AutoHotkey does.
#WindowClassMainChange main window class from AutoHotkey to something different.
#WindowClassGuiChange Gui window class from AutoHotkeyGUI to something different.
AhkThreadCreate a new thread using AutoHotkey.dll included in resources.
AliasCreate ByRef variable or share variables to other threads in a multi-thread environment.
BinRunRun executable file from Memory.
BinToHexConvert binary data to Hex string.
CreateScriptCreate script from main script for NewThread, AutoHotkey.dll, BinRun or DynaRun.
CriticalSectionCreates a Critical Section Structure and returns its pointer. Use EnterCriticalSection and LeaveCriticalSection to Enter and Leave the Critical Section.
Critical Section is requred for multi-threading environment.
CryptAESEncrypt and Decrypt data.
DirGetParentGet parent directory of a file or directory.
DynaRunRun code dynamically in new AutoHotkey process.
ErrorMessageGet error message string of A_LastError.
FileReplaceSimilar to FileAppend but replaces the file if it exists.
FindFunc (low level)Get a pointer to a Function.
FindLabel (low level)Get a pointer to a label.
#NoEnv / GetEnv#NoEnv is now used in all scripts. Use GetEnv to add environment variables to script.
GetEnvGet environment variables and make global variables in script.
HexToBinConvert Hex string to binary memory.
HIBYTEGet high byte from a value.
HIWORDGet high word from a value.
IsBOMCheck if a file has byte order mark.
LOBYTEGet low byte from a value.
LOWORDGet low word from a value.
MCodeHCreate machine code function.
ResDeleteDelete a resource in executable file.
ResDllCreateCreate a resource only dll file.
ResExistCheck if a resource exists in executable file.
ResPutAdd a resource to executable file from memory.
ResPutFileAdd a file to resources of executable file.
SendSleep functionality for Send command, for example Send 123{100}456 would send 123 then sleep for 100 milliseconds and send 456.
sizeofReturns the size in bytes for default data type, structure or structure definition, for example MsgBox % sizeof("TCHAR").
StrPutVarPut an encoded string into a variable.
ToCharConvert an integer to signed char.
ToIntConvert an integer to signed integer.
ToShortConvert an integer to signed short.
ToUCharConvert an integer to unsigned char.
ToUIntConvert an integer to signed integer.
ToUShortConvert an integer to unsigned integer.
VarSetCapacityWhen the buffer size of a variable is changed and FillByte is not used and old and new capacity is > 1 byte, the original buffer content is kept/copied to the new buffer.
WinApiUse WinApi functions as if it was a build-in function.
Zip Functions Various zip functions to compress and uncompress files or data in memory. ZipCreateFile, ZipAddFile, ZipCloseFile, UnZip, ZipCreateBuffer, ZipAddBuffer, ZipCloseBuffer, UnZipBuffer, ZipRawMemory, UnZipRawMemory, ZipInfo, ZipOptions, ZipAddFolder
Gui Gui related features
Auto positioning and resizing of controls

Controls can be automatically positioned and resized when Gui is resized. Controls will be positioned and resized relatively to the initial size of Gui (Gui, Show).
The initial size of controls becomes the smallest size it will ever shrink to.
Resizing and positioning values can be followed by decimal number (e.g. 2 or 0.5) as well as fraction of an integer (e.g. 1/3), negative values are also supported.
When no value is given it defaults to 1, so ax, ax1 and ax1/1 do the same thing.
Note: the order in which controls are created might be important when position of previous controls needs to be considered.

The following auto position options are supported:

AX: Move the control horizontally by a specified amount when the Gui changes width.
For example: if the Gui width sizes up by 100px, a setting of ax1/2 would mean that the control would move to the right by 50px.

AY: Move the control vertically by a specified amount when the Gui changes height.
For example: if the Gui height sizes up by 100px, a setting of ay1/5 would mean that the control would move down by 20px.

AXP and AYP: Move the control by the same amount that the previous control moved.

AXA and AYA: Move the control by the same amount that the previous control moved and resized so the control is placed right after or below previous control.

AXR and AWR: Reset horizontal repositioning.

AYR and AHR: Reset vertical repositioning.

The following auto size options are supported:

AW: Resize the control width by an amount relative to the change in Gui width.
For example: if control is 100px wide and the Gui width sizes up by 100 px, a setting of aw0.5 would mean that control would widen by 50px.

AH: Resize the control height by an amount relative to the change in Gui height.
For example: if control is 20px wide and the Gui height sizes up by 100 px, a setting of aw1/4 would mean that control would heighten by 25px.

AWA and AHA: Resize the control width or height by the same amount as previous control.

Gui Scroll options

Scroll: Enable vertical and horizontal Scroll bars for gui.

VScroll: Enable vertical Scroll bar.

HScroll: Enable horizontal Scroll bar.

ComObjDllCreates a COM Object from a COM dll.
CriticalObjectCreate multi-thread save object.
InputHook Option AWhen using option A, previous input or text set via MyInputHook.Input := Text will not be discarded, instead new input will be appended to the text.
DynaCallImports a Dll function and defines its parameters so we don't need to define on each call like in DllCall.
ObjByRefSave variables by reference in object.
ObjDumpDump an object to memory or file.
ObjLoadLoad a dumped object from memory or file.
ObjShareCreate multi-thread save COM IDispatch proxy object.
StructCreates C++ like Structure object that is accessed and modified using object syntax.
MemoryModule Allows loading a dll from Memory, e.g. Resource.
MemoryFindResourceSimilar to FindResource.
MemoryFreeLibrarySimilar to FreeLibrary for MemoryModule.
MemoryGetProcAddressSimilar to GetProcAddress for MemoryModule.
MemoryLoadLibrarySimilar to LoadLibrary but loads a dll from memory. This allows real multi-threading by loading loading a dll multiple times.
MemoryLoadResourceSimilar to LoadResource.
MemoryLoadStringSimilar to LoadString.
MemorySizeofResourceSimilar to SizeOfResource for MemoryModuel.
NULL New built-in, variable same as FALSE. Resolves to 0.
A_AhkDirreturns the path of current exe.
A_IsDllreturns 1 (true) if called from AutoHotkey.dll and FALSE/NULL/0 otherwise.
A_DllPathreturns the path of current module (dll or exe).
A_DllDirreturns the path of current module (dll or exe).
A_ModuleHandleEquivalent to GetModuleHandle(NULL) but returns the correct ModuleHandle for AutoHotkey.dll when using MemoryModule
A_ScriptStructreturns pointer to internal g_script structure.
A_GlobalStructreturns pointer to internal g structure.
Compiling AutoHotkey Original AutoHotkey is only capable to be compiled with AutoHotkeySC.bin. In AutoHotkey_H any AutoHotkey binary (AutoHotkey.dll, AutoHotkey.exe, AutoHotkeySC.bin) can be compiled.
This allows keeping full functionality of AutoHotkey including executing other scripts. Compiled AutoHotkey.exe and AutoHotkey.dll can use /E switch to execute different script than compiled one.
Ahk2Exe Custom version of fincs Ahk2Exe compiler with support for AutoHotkey_H features.
Resource Library You can include library functions in resource of exe or dll (Resorce type must be "LIB", e.g. LIB/WATCHDIRECTORY.AHK).
Additionally AutoHotkey.dll can load library functions from exe file automatically (Note both execuables must be using same password if source is encrypted).
Note, this is not supported by AutoHotkeySC.bin.
Resource Compression and EncryptionAhk2Exe supports compression and encryption for resource files, AutoHotkey will decompress and decrypt the files internally automatically. UnZipRawMemory can be used to decompress and decrypt resources in Script.
AutoHotkey.dll Module
AutoHotkey.dllAutoHotkey Module with COM support that can be used for multi-threading and allows AutoHotkey to be embedded into another applications. It provides AutoHotkey functionality that might be more difficult to implement in another language.
Exported Functions Available for AutoHotkey.exe and AutoHotkey.dll
addFileAdd and optionally execute additional script/code from file. Not available for scripts compiled with AutoHotkeySC.bin.
addScriptAdd and optionally execute additional script/code from text/memory/variable. Not available for scripts compiled with AutoHotkeySC.bin.
ahkassignAssign a value to variable or pointer of variable.
ahkExecExecute some script/code from text/memory/variable temporarily. Not available for scripts compiled with AutoHotkeySC.bin.
ahkExecuteLineExecutes script from given line pointer.
ahkFindFuncFind a function and return its pointer.
ahkFindLabelFind a label and return its pointer.
ahkFunctionCall a function via SendMessage method. Mainly used with AutoHotkey.dll to call a function in dll script or call a function in main script from dll.
ahkgetvarRetrieve a value from a variable.
ahkLabelGoto (PostMessage) or Gosub (SendMessage) a Label. Also used mainly with AutoHotkey.dll
ahkPausePause Script.
ahkPostFunctionCall a function via PostMessage method (does not wait until function returns). Also used mainly with AutoHotkey.dll
Exported Functions Available only in AutoHotkey.dll
ahkdll and ahktextdllLoad a new thread from a file or string/memory/variable, current thread will be terminated.
ahkReadyReturns 1 (true) if a thread is being executed currently, 0 (false) otherwise.
ahkReloadReload thread using same parameters used with ahkdll or ahktextdll.
ahkTerminateTerminate thread.
ahk_parent Allow to identify the right window if multiple window with same criteria exist, ahk_parent must be followed by space and Window Id. ahk_parent can be used in any Win... and Control... functions. For example WinActivate, ahk_class #32770 ahk_parent 0x3F4A5
& Retrieve pointer to any String or build in variable like &A_LoopField or &"Text".

Function Libraries

In addition to the user library in %A_MyDocuments%\AutoHotkey\Lib, standard library in the AutoHotkey directory and local library which resides in %A_ScriptDir%\Lib functions may be auto-included from a folder that %A_AhkExeDir%\lib.lnk points to. For more information, see Libraries of Functions.

Static Variables

Static variables are saved in separate array internally for better performance. Also ListVars shows static and local variables separately.


A special thanks to Jonathan Bennett, whose generosity in releasing AutoIt v2 as free software in 1999 served as an inspiration and time-saver for myself and many others worldwide. In addition, many of AutoHotkey's enhancements to the AutoIt v2 command set, as well as the Window Spy and the old script compiler, were adapted directly from the AutoIt v3 source code. So thanks to Jon and the other AutoIt authors for those as well.

Finally, AutoHotkey would not be what it is today without these other individuals.

~ Chris Mallett