this 与 A_Args:取得触发时的信息
上下文是 Diatom 随调用提供的数据。例如触发时的窗口、鼠标位置和命令名。不同入口提供的字段不同,热键不等同于鼠标手势。
函数正文使用 this
ini
[show_context]
type=f
code='''
text := "命令:" this["name"]
if this.Has("title")
{
text .= "`n窗口:" this["title"]
}
MsgBox(text, "Diatom")
'''this 是字符串映射,使用 this["字段"]。示例只对入口不保证提供的窗口信息判断一次,不需要把所有内部数据反复校验。
完整脚本使用 A_Args
ahk
;? type=e,read=1
if A_Args.Has("name")
{
MsgBox(A_Args["name"], "Diatom")
}
ExitApp()这里的 A_Args 是 Diatom 初始化的映射,不是普通 AHK 命令行参数数组。池内函数调用时,应以函数收到的 this 为本次数据,不把池宿主的 A_Args 当成本次参数。
常用字段
| 字段 | 含义与边界 |
|---|---|
name、type |
命令名和执行模式 |
src、sid |
定义来源、加载时编号 |
from、tid、time |
调用来源、调用编号、内部时间值 |
id |
鼠标入口常见的顶层窗口句柄 |
hwnd |
鼠标指向的窗口或控件句柄,可能与 id 不同 |
title |
触发时取得的标题 |
exe |
进程名称,常不带 .exe |
class |
窗口类名 |
path、line |
程序路径、命令行 |
dx、dy |
按下位置,屏幕坐标 |
ux、uy |
释放位置,按下阶段没有 |
字段值大多为字符串;用于算术时再转换。time 是内部计时值,不当作日期或 Unix 时间戳使用。
鼠标入口通常保存按下时的窗口信息。脚本执行后再查询当前活动窗口,可能得到另一个窗口;需要原目标时优先使用上下文句柄。
附加数据
in_info=1 可把匹配信息以 in_ 前缀复制进鼠标调用数据。普通 UIA、网页等附加字段是否出现,仍取决于本次采集和提供方。
no_fs 会省略常规上下文填充,适合明确不需要这些数据的命令。刚开始编写命令时不要先开启它。