执行模式、并发与生命周期
type 同时关系到脚本怎样执行,以及执行器是否复用。刚开始只需要区分“短命令”和“完整脚本”。
AHK 常用模式
| 写法 | 用途 | 执行方式 |
|---|---|---|
f |
函数正文,提供 this |
复用默认 AHK 池 |
c |
调用函数 | 复用默认 AHK 池 |
jf、jc |
Job 中的函数正文/函数调用 | 复用 Job 进程池 |
ef、ec |
独立进程中的函数正文/函数调用 | 复用独立进程池 |
d |
完整脚本 | 新建默认解释器实例 |
j |
完整脚本 | 新建 Job 进程 |
e |
完整脚本 | 新建独立进程 |
l、jl、el |
标签式正文 | 复用解释器,适合既有高级命令 |
t |
调用指定接收目标 | 命名通信 |
r |
内置动作 | 主程序原生执行 |
大小写会归一化,组合字母通常会排序;这不代表任意字母组合有效。不要自行发明 df、ae 等类型。
conf.toml 中的 no_dll=1 会把默认 AHK 执行器路由到 Job 进程,no_dll=2 路由到独立进程。因此 f 并不始终意味着实际运行在 DLL 内。
复用带来的影响
解释器可能已经加载过这个命令的函数、全局变量和库。重复调用不保证全新环境;两条命令也不应依赖“上次刚好分配到同一个执行器”。
read 主要服务于完整独立脚本的调试,不负责替换复用解释器中的函数或标签缓存。修改这类代码后重启,或使用适合独立调试的模式。
控制同名实例
limit=1:已有可连接的同名实例时跳过新实例。
limit=2:向已有实例发送退出请求,再建立新实例。
limit=3:已有实例时请求退出;没有实例时启动,可用于开关式服务。
这是通过同名接收端判断的行为,不是任意池函数的互斥锁,也不承诺强制杀死失去响应的进程。
退出时
Job 进程被设计为随根 Job 清理;独立 e 进程可能保留。默认解释器的实际生命周期还受 no_dll 影响。完整脚本执行完一次动作后,若不再需要常驻,可显式 ExitApp();池函数里不要随意 ExitApp(),它会结束整个执行器。
Python 常用 jp/ep,JavaScript 常用 js/es,PowerShell 常用 jw/w,Lua 常用 ju/du。使用前应确认相应运行时和基础脚本已配套。