普通 AHK v1 脚本通常是启动时就把代码加载完,后面只能执行已经存在的标签、函数和热键。AHK_H 的 addScript() 让脚本可以在运行时追加一段新代码,再选择是否立即执行。这个功能很适合插件式工具、临时生成函数、给新线程注入初始化代码。

三个执行模式

  • 0:只添加代码,不执行。适合先注册函数,后面再调用。
  • 1:添加代码,并执行,等待执行结束。适合需要确认结果的场景。
  • 2:添加代码,并执行,但不等待。适合投递后台任务。
#Requires AutoHotkey v1.1
#NoEnv
SetBatchLines, -1

code =
(
TestFromAddScript() {
    MsgBox, 这是运行时追加进来的函数
}
)

; 先把函数加进当前脚本,但不执行
addScript(code, 0)

; 再调用刚刚追加的函数,并等待执行完
addScript("TestFromAddScript()", 1)

调用已有函数

实测脚本里还验证了一个容易忽略的点:addScript() 不只能追加新函数,也可以把一行“调用现有函数”的代码塞进去执行。也就是说,你可以把它当成一个很轻量的运行时入口。

addScript("MainProcessFunction()", 1)

MainProcessFunction() {
    MsgBox, 当前进程里原本就有这个函数
}

给新线程注入代码

如果你用 AhkThread() 创建了一个线程对象,也可以对这个对象使用 addScript。这种写法适合先启动一个干净线程,再按需要把函数塞进去。

dll := AhkThread()

threadCode =
(
#Persistent
Worker(name) {
    MsgBox, % "新线程收到:" name
}
)

dll.addScript[threadCode, 0]
dll.ahkFunction("Worker", "来自主线程")

什么时候该用

  • 适合:插件系统、脚本片段调试、给 H 版线程动态补函数、根据配置生成小函数。
  • 不适合:长期稳定的公共函数库。稳定代码仍然建议放进 #Include 或独立库文件。
  • 不要把用户输入原样拼成脚本执行。动态代码越灵活,越要控制来源和内容。
  • 如果只是调用现有函数,优先考虑普通函数调用;只有需要“运行时新增代码”时再用 addScript()
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。