普通 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()。
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)