this 与 A_Args
Diatom/用户手册/this 与 A_Args

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 会省略常规上下文填充,适合明确不需要这些数据的命令。刚开始编写命令时不要先开启它。

用户手册

正在读取手册…