AhkThread

使用 AutoHotkey.dll 在当前进程中创建一个真正的附加 AutoHotkey 线程。


OutputVar := AhkThread(ScriptOrFile, Parameters, Title, ScriptIsFile, DllToUse)
函数示例: Thread := AhkThread("MsgBox Message from thread.")

参数

OutputVar(输出变量)

用于存储新创建线程的对象的变量的名称。
使用这个对象,我们可以使用简单的对象语法调用所有 AutoHotkey.dll 函数。

ScriptOrFile(脚本或文件,可选)

要执行的 AutoHotkey 脚本。该参数可以是以下之一:

- 作为字符串传入的脚本,或包含脚本字符串的变量。
- ahk 文件路径。要从文件启动脚本,参数 ScriptIsFile 必须设为 true。
- 留空或省略时启动空脚本 ("#Persistent`n#NoTrayIcon")。
- 传入 0 表示只准备线程但不启动它。使用 ahkdllahktextdll 启动新线程。

Parameters(参数,可选)

命令行参数,可通过内置变量 A_Args 对象访问。

Title(标题,可选)

当未给出标题时,将在 MsgBox、Gui... 中显示的 dll 线程的标题(默认文件名)。

ScriptIsFile(脚本是文件,可选)

如果 ScriptOrFile 是磁盘或网络上文件的路径,则设置为 true 或 1。

DllToUse(要使用的 dll,可选)

将用于创建新线程的 AutoHotkey.dll 的路径或资源名称。

一般备注

编译 AutoHotkey.dll 时,ahkdll 和 ahktextdll 的行为会有所不同。
当 ScriptOrFile 省略或为空时,将执行已编译的脚本。

要释放线程的资源,我们必须调用 ahkthread_free(obj) 并释放对象 (obj:="")。
obj.ahkterminate() 可以选择性地调用。

方法
ahkdll 从文件加载新线程,当前线程将被终止。
ahktextdll 从字符串/内存/变量加载新线程,当前线程将被终止。
ahkReady 如果当前正在执行线程,则返回 1 (true),否则返回 0 (false)。
ahkTerminate 终止线程。
ahkReload 使用与以下相同的参数重新加载线程 ahkdllahktextdll.
ahkFunction 通过 SendMessage 方法调用函数。主要与AutoHotkey.dll一起使用,调用dll脚本中的函数或从dll中调用主脚本中的函数。
ahkPostFunction 通过 PostMessage 方法调用函数(不等到函数返回)。也主要与AutoHotkey.dll一起使用
ahkExecuteLine 从给定的行指针执行脚本。
ahkLabel Goto (PostMessage) 或 Gosub (SendMessage) 标签。也主要与AutoHotkey.dll一起使用
ahkFindFunc 找到一个函数并返回它的指针。
ahkFindLabel 找到一个标签并返回它的指针。
addFile 添加并可选择执行文件中的其他脚本/代码。不适用于使用 AutoHotkeySC.bin 编译的脚本。
addScript 添加并可选择执行文本/内存/变量中的其他脚本/代码。不适用于使用 AutoHotkeySC.bin 编译的脚本。
ahkExec 暂时从文本/内存/变量执行一些脚本/代码。不适用于使用 AutoHotkeySC.bin 编译的脚本。
ahkassign 为变量或变量指针赋值。
ahkgetvar 从变量中检索值。
ahkPause 暂停脚本。

相关

AutoHotkey.dll

示例

ahkdll:=AhkThread("#Persistent`nvariable:=`"Thread`"") ; 加载 AutoHotkey 模块并启动脚本。
While !ahkdll.ahkgetvar.variable
  Sleep 50 ; 等待变量被设置。
MsgBox % ahkdll.ahkgetvar.variable ; 显示线程中变量的内容
ahkthread_free(ahkdll),ahkdll:="" ; 停止线程中的执行并释放资源。