版本 AHK_H v1

https://autohotkey.com

© 2019 Hotkeyit, Steve Gray, Chris Mallett, portions © AutoIt Team and various others
© 汉化:dbgba   © AutoHotkey精选资源站

软件许可证:GNU General Public License

AutoHotkey_H 新功能 [home]


命令 / 功能
#DllImport为dll函数创建一个别名函数,该函数允许省略参数并使用默认值。
它还可以加载作为十六进制字符串提供的纯机器代码,请参阅示例
#WarnContinuableException不要发出H版的可继续异常警告,让它以AutoHotkey_L版那样报错执行
#WindowClassMain将主窗口类名从AutoHotkey更改为其它类名
#WindowClassGui将Gui窗口的类名从AutoHotkeyGUI更改为其它类名
AhkThread使用资源文件中包含的AutoHotkey.dll创建新线程
Alias在多线程环境中创建ByRef变量或将变量共享给其它线程
BinRun从内存运行可执行文件
BinToHex将二进制数据转换为十六进制字符串
CreateScriptNewThread, AutoHotkey.dll, BinRunDynaRun 的主脚本创建脚本
CriticalSection创建 临界区结构 使用 EnterCriticalSection 和 LeaveCriticalSection 进入和离开临界区。
多线程环境需要临界区
CryptAES加密和解密数据
DirGetParent获取文件或目录的父目录
DynaRun以新的AutoHotkey进程,动态运行代码
ErrorMessage获取A_LastError的错误消息字符串
FileReplace类似于FileAppend,但如果文件存在,则替换该文件
FindFunc (low level)获取指向函数的指针
FindLabel (low level)获取指向标签的指针
#NoEnv / GetEnv让现有脚本都使用 #NoEnv。使用 GetEnv 为脚本添加环境变量
GetEnv获取环境变量并在脚本中设置全局变量
HexToBin将十六进制字符串转换为二进制内存
HIBYTE从数值中获取高 byte
HIWORD从数值中获取高 word
IsBOM检查文件是否有字节顺序标记
LOBYTE从数值中获取低 byte
LOWORD从数值中获取低 word
MAKELANGID生成 LANGID
MAKELCID生成 LCID
MAKELONG生成 LONG
MAKELPARAM生成 LPARAM
MAKELRESULT生成 LRESULT
MAKEWORD生成 WORD
MAKEWPARAM生成 WPARAM
MCodeH创建机器码功能
ResDelete删除可执行文件中的资源文件
ResDllCreate创建仅限资源的dll文件
ResExist检查可执行文件中是否存在资源
ResPut将资源文件从内存添加到可执行文件
ResPutFile将文件添加到可执行文件的资源中
Send支持 Sleep 的 Send 命令,例如 Send 123{100}456 将发送 123,然后 Sleep 100 毫秒再发送 456
sizeof以 字节 为单位返回 默认数据类型, 结构结构定义大小, 例如 MsgBox % sizeof("TCHAR")
StrPutVar将编码的字符串放入变量中
ToChar将整数 integer 转换为有符号字符 char
ToInt将整数 integer 转换为有符号整数 signed integer
ToShort将整数 integer 转换为有符号短整型 signed short
ToUChar将整数 integer 转换为无符号字符 unsigned char
ToUInt将整数 integer 转换为有符号整数 signed integer
ToUShort将整数 integer 转换为无符号整数 unsigned integer
VarSetCapacity当变量的缓冲区大小发生变化且未使用 FillByte,且新旧容量均大于 1 字节时,将保留/复制原始缓冲区内容到新缓冲区
WinApi将WinApi函数当作内置函数使用
Zip Functions 各种用于压缩和解压缩内存中的文件或数据的 zip 函数。 ZipCreateFile, ZipAddFile, ZipCloseFile, ZipCompressionLevel, UnZip, ZipCreateBuffer, ZipAddBuffer, ZipCloseBuffer, UnZipBuffer, ZipRawMemory, UnZipRawMemory, ZipInfo, ZipOptions, ZipAddFolder
Gui Gui 相关功能
控件的自动定位和调整大小

当调整 Gui 的大小时,可以自动定位和调整控件的大小。控件的位置和大小将相对于 Gui 的初始大小进行调整(Gui, Show)。
控件的初始尺寸将成为其缩小后的最小尺寸。
调整大小和定位值后面可以是十进制数(如 2 或 0.5)以及整数的分数(如 1/3),也支持负值。
如果没有给定数值,则默认为 1,因此 ax、ax1 和 ax1/1 的作用相同。
注意:当需要考虑前一个控件的位置时,创建控件的顺序可能很重要。

支持以下自动定位选项:

AX: 当图形宽度发生变化时,将控件水平移动指定的幅度。
例如:如果图形宽度增加 100px,设置 ax1/2 意味着控件向右移动 50px。

AY: 当图形高度发生变化时,按指定量垂直移动控件。
例如:如果图形高度增加了 100px,设置为 ay1/5 意味着控件将向下移动 20px。

AXPAYP: 按前一个控件的移动量移动控件。

AXAAYA: 按前一控件的移动量移动控件并调整大小,使控件位于前一控件的右后方或下方。

AXRAWR: 重置水平重新定位。

AYRAHR: 重置垂直重新定位。

支持以下自动调整大小选项:

AW: 根据图形宽度的变化调整控件宽度。
例如:如果控件宽度为 100px,而 Gui 宽度增加了 100 px,那么设置 aw0.5 将意味着控件宽度增加 50px。

AH: 根据图形高度的变化调整控件高度。
例如:如果控件宽度为 20px,而 Gui 高度增加了 100 px,那么设置 aw1/4 将意味着控件高度增加 25px。

AWAAHA: 以与前一个控件相同的大小调整控件宽度或高度。

Gui 滚动选项

Scroll: 启用图形界面的垂直和水平滚动条。

VScroll: 启用垂直滚动条。

HScroll: 启用水平滚动条。

Objects 对象
ComObjDll从 COM dll 创建 COM 对象
CriticalObject创建多线程共享保存对象
InputHook Option A使用选项 A 时,之前的输入或通过 MyInputHook.Input := Text 设置的文本不会被丢弃,相反,新的输入将被追加到文本中
DynaCall导入 Dll 函数并绑定其参数,这样我们就不需要像在 DllCall 中那样在每次调用时都要定义参数
ObjByRef以引用方式保存对象中的变量
ObjDump将对象转存到内存或文件中
ObjLoad从内存或文件中加载转储对象
ObjShare创建多线程保存 COM IDispatch 代理对象
Struct创建类似 C++ 的结构对象,使用对象语法访问和修改
内存模块 允许从内存加载 dll,如资源文件
MemoryFindResource类似 FindResource
MemoryFreeLibrary类似 FreeLibrary 用于 MemoryModule
MemoryGetProcAddress类似 GetProcAddress 用于 MemoryModule
MemoryLoadLibrary类似 LoadLibrary 但会从内存中加载一个 dll。这样就可以通过多次加载一个 dll 来实现真正的多线程
MemoryLoadResource类似 LoadResource
MemoryLoadString类似 LoadString
MemorySizeofResource类似 SizeOfResource 用于 MemoryModuel
变量
NULL 新的内置变量与FALSE相同。解析为0
A_AhkDir返回当前exe的路径
A_IsDll如果从 AutoHotkey.dll 调用,则返回 1(true),否则返回 FALSE/NULL/0
A_DllPath返回当前模块的路径(dll 或 exe)
A_DllDir返回当前模块的路径(dll 或 exe)
A_ModuleHandle等同于 GetModuleHandle(NULL),但在使用 MemoryModule 时返回 AutoHotkey.dll 的正确 MemoryModule
A_ScriptStruct返回内部 g_script 结构体的指针
A_GlobalStruct返回指向内部 g 结构体的指针
编译
编译 AutoHotkey 原始 AutoHotkey 只能与 AutoHotkeySC.bin 一起编译。在 AutoHotkey_H 中,可以编译任何 AutoHotkey 二进制文件(AutoHotkey.dll、AutoHotkey.exe、AutoHotkeySC.bin)。
这样就可以保持 AutoHotkey 的全部功能,包括执行其他脚本。编译后的 AutoHotkey.exe 和 AutoHotkey.dll 可使用 /E 开关执行与编译后不同的脚本。
Ahk2Exe 自定义版本的 Ahk2Exe 编译器,支持 AutoHotkey_H 功能。
资源库 您可以在 exe 或 dll 资源中包含库函数(Resorce 类型必须为 "LIB",例如 LIB/WATCHDIRECTORY.AHK)。
此外,AutoHotkey.dll 还可以自动从 exe 文件加载库函数(注意,如果源代码已加密,则两个可执行文件必须使用相同的密码)。注意,AutoHotkeySC.bin 不支持此功能。
资源压缩和加密Ahk2Exe 支持对资源文件进行压缩和加密,AutoHotkey 将在内部自动解压和解密文件。UnZipRawMemory 可用于解压和解密脚本中的资源。
AutoHotkey.dll 模块
AutoHotkey.dllAutoHotkey 模块支持 COM,可用于多线程,并允许将 AutoHotkey 嵌入到其它应用程序中。dll所提供的 AutoHotkey 功能,让其它语言也能轻松拥有和实现。
导出的函数 可用于AutoHotkey.exe 和 AutoHotkey.dll
addFile添加并执行文件中的附加脚本/代码。不适用于使用 AutoHotkeySC.bin 编译的脚本
addScript从文本/内存/变量中添加并执行附加脚本/代码。不适用于使用 AutoHotkeySC.bin 编译的脚本
ahkassign为脚本中的 变量 或 变量指针 赋值
ahkExec从文本/内存/变量中临时执行附加脚本/代码。不适用于使用 AutoHotkeySC.bin 编译的脚本
ahkExecuteLine从给定的行指针开始执行脚本
ahkFindFunc查找函数并返回其指针
ahkFindLabel查找标签并返回其指针
ahkFunction通过 SendMessage 等待返回的方式调用函数。主要与 AutoHotkey.dll 一起使用,以调用 dll 脚本中的函数或从 dll 调用主脚本中的函数
ahkgetvar用于读取脚本中的 变量 中内容
ahkLabelGoto(PostMessage)或 Gosub (SendMessage)一个标签。也主要用于 AutoHotkey.dll
ahkPause将 暂停 / 继续执行 线程, 它使用AutoHotkey内部的 Sleep 来实现
ahkPostFunction通过 PostMessage 方法调用函数(不等待函数返回)。也主要用于 AutoHotkey.dll
导出的函数 仅在AutoHotkey.dll中可用
ahkdllahktextdll从文件或字符串/内存/变量加载新线程,正运行的线程将被终止
ahkReady如果当前正在执行线程,则返回 1(true),否则返回 0(false)
ahkReload使用与 ahkdllahktextdll 相同参数重启正运行的脚本
ahkTerminate用于终止并退出正在执行的脚本
7-zip.dll 模块
7-zip.dll7-zip.dll模块,用于高级压缩和解压缩任务
其它
ahk_parent ahk_parent 可以在任何 Win... 和 Control... 函数中使用。例如 WinActivate, ahk_class #32770 ahk_parent 0x3F4A5
& 读取指向任何字符串或内置变量 &A_LoopField or &"Text" 的指针

函数库

除了 %A_MyDocuments%\AutoHotkey\Lib 中的用户库外,AutoHotkey 目录中的标准库和 %A_ScriptDir%\Lib 中的本地库函数也可以从 %A_AhkExeDir%\lib.lnk 指向的文件夹中自动包含。有关详细信息,请参阅函数库。

Static 静态变量

静态变量在内部保存在单独的数组中,以提高性能。此外,ListVars 会分别显示静态变量和局部变量。

鸣谢

在此特别感谢 Jonathan Bennett,他在 1999 年慷慨地将 AutoIt v2 作为免费软件发布,为我本人和全球许多其他人带来了灵感并节省了时间。此外,AutoHotkey 对 AutoIt v2 命令集的许多改进,以及 Window Spy 和旧脚本编译器,都直接改编自 AutoIt v3 源代码。因此也要感谢 Jon 和其他 AutoIt 作者。

最后,如果没有AutoHotkey,它就不会是今天的样子 这些其他人.

~ Chris Mallett