步骤、脚本和 AutoHotkey
操作要执行的内容可以用三种方式编写。操作 页面 执行内容 卡片上的 编写方式 用于选择运行哪一种。
| 方式 | 是什么 | 何时选择 |
|---|---|---|
| 步骤 | 由您选择并填写的步骤组成的列表,每个步骤一行。无需键入代码。 | 您希望在不编写代码的情况下构建操作。大多数操作都适用:发送按键、键入文本、移动或关闭窗口、等待、提问。 |
| 脚本 | Input.Observer 自己的脚本语言,在代码编辑器中键入。 | 您需要算术运算、用多个部分拼接文本、用变量计数的循环,或任何步骤无法表达的内容。 |
| AutoHotkey | 一个 AutoHotkey v2 脚本,由 AutoHotkey 本身运行。 | 您已经有 AutoHotkey 代码,或者需要只有 AutoHotkey 才能做到的事情。 |
步骤和脚本在 Input.Observer 内部运行,并调用相同的内置函数:步骤是以可视化方式编写脚本所要做的事情。请参阅步骤和脚本语言参考。
每种方式保留自己的内容
一个操作同时保存步骤正文、脚本正文和 AutoHotkey 正文。切换 编写方式 ① 会改变运行哪一个。它永远不会删除其他正文,因此您可以切换回来。
如果您选择的方式为空而另一种方式有内容,开关下方会显示一条通知,说明运行该操作不会执行任何事情,并提供一个按钮来使用有内容的那种方式。
从步骤切换到脚本
当操作有步骤且其脚本正文为空时,从 步骤 切换到 脚本,Input.Observer 会提议转换这些步骤:是否将步骤转换为脚本? 选择 转换 可将转换结果放入脚本编辑器。
- 步骤保持原样。切换回 步骤 会看到它们没有变化。
- 没有反向转换。脚本无法转换为步骤。
- 使用了 当…时重复、重复直到、退出循环 或 停止步骤 的步骤不会提供转换,因为脚本中没有对应的语句。您仍然可以切换;只是脚本正文会从空白开始。
- 永远不会与 AutoHotkey 相互转换。
- 当这些步骤是来自 录制器 页面的录制内容时,对话框还会说明脚本会忽略 回放速度 和 回放鼠标路径细节:其等待按录制时的速度运行,并且会回放每一次录制的鼠标移动(录制器设置)。
从步骤到脚本展示了每种步骤会变成什么。
AutoHotkey
AutoHotkey 是一个独立的程序,Input.Observer 会在运行 AutoHotkey 操作时启动它。它不随附提供;您需要自行安装 AutoHotkey v2,并告诉 Input.Observer 它在哪里。
- 安装 AutoHotkey v2。
- 在 常规 页面上,打开 启用 AutoHotkey,并将 AutoHotkey 可执行文件 设置为其程序文件,例如
AutoHotkey64.exe。 - 现在 AutoHotkey 会出现在 编写方式 下。应用更改,使引擎使用新设置。
规则:
- 只有当 启用 AutoHotkey 打开时,或者操作已经以 AutoHotkey 方式运行时,编写方式 下才会提供 AutoHotkey。在 AutoHotkey 关闭时,AutoHotkey 操作不执行任何事情,页面会加以说明。
- 请使用普通的 AutoHotkey 版本。名称中带有
_UIA的版本(例如AutoHotkey64_UIA.exe)无法运行来自 Input.Observer 的脚本。 - 当 AutoHotkey 已打开,但在启动时或重新加载配置时找不到其程序时,Input.Observer 会请您选择 浏览 AutoHotkey 可执行文件 或 保持现状。
- 每次运行都会用您的脚本启动一个新的 AutoHotkey 进程。它无法调用 Input.Observer 的内置函数,并会一直运行到自行结束;停止所有操作热键可以结束它。
- 在您的脚本之前,Input.Observer 会设置描述触发器的变量,例如
IO_ActionName、IO_TriggerKind以及手势或热键的窗口(AutoHotkey 变量)。编辑器的 此处可用的变量 列表会显示该操作的触发器提供的变量;单击某个变量即可插入它。 - 脚本写入其标准输出的内容会以
AHK:开头显示在诊断控制台中(诊断控制台)。
步骤或脚本操作也可以使用 AutoHotkeyExecuteScript 内置函数运行一段 AutoHotkey 代码。适用相同的设置和可执行文件。
AutoHotkey 变量
每次 AutoHotkey 运行都以 Input.Observer 在您的脚本之前添加的几行开始,这几行会根据触发操作的内容设置 IO_ 变量。这适用于以 AutoHotkey 编写的操作,也适用于用 AutoHotkeyExecuteScript 运行的代码,后者会获得调用它的操作的变量。
每次运行 都会设置这三个:
| 变量 | 内容 |
|---|---|
IO_ActionName | 操作的名称。对于全局事件,是 Global_Event_ 后跟配置文件中该事件的名称,例如 Global_Event_release 或 Global_Event_foreground_changed。当没有任何内容触发该运行时(例如从控制台运行的脚本)为空。 |
IO_AppGroupName | 找到该操作的应用程序组的名称,例如 Global。对于全局事件为空。 |
IO_TriggerKind | 触发运行的内容:Gesture、Hotkey、TextExpansion、MouseButton(鼠标按键或 绘制按钮已释放 全局事件)、Wheel(滚轮全局事件)或 None。 |
其余变量取决于触发器,只会设置该触发器的变量:
| 触发器 | 变量 | 内容 |
|---|---|---|
| 手势 | IO_GestureWindow | 手势开始时所在的窗口 |
IO_GestureButton | 绘制按钮:left、right、middle、x1 或 x2 | |
IO_GestureStartX、IO_GestureStartY | 笔划开始的位置 | |
IO_GestureEndX、IO_GestureEndY | 笔划结束的位置 | |
IO_GestureBoundsLeft、IO_GestureBoundsTop、IO_GestureBoundsRight、IO_GestureBoundsBottom | 包围整个笔划的矩形 | |
IO_GesturePoints | 按绘制顺序排列的笔划的每个点,形式为由 [x, y] 数组组成的数组 | |
| 热键 | IO_HotkeyWindow | 按下热键时的前台窗口 |
IO_HotkeyVkCode | 最后一个键的 Windows 虚拟键码,例如 K 为 75 | |
IO_HotkeyModifiers | 组合键中的修饰键之和:Ctrl 1、Shift 2、Alt 4、Win 8(Ctrl+Alt 为 5) | |
| 文本扩展 | IO_TextExpansionWindow | 您键入时所在的窗口 |
IO_TextExpansionPattern | 您键入的缩写 | |
| 鼠标按键事件 | IO_MouseWindow | 指针下方的窗口 |
IO_MouseButton | 按键:left、right、middle、x1 或 x2 | |
IO_MouseX、IO_MouseY | 指针所在的位置 | |
| 滚轮事件 | IO_WheelWindow | 指针下方的窗口 |
IO_WheelDelta | 滚轮转动的幅度,与 Windows 报告的相同:普通滚轮的一格为 120(平滑滚动的滚轮和触摸板发送的步长更小),远离您(或向右)为正,朝向您(或向左)为负 | |
IO_WheelHorizontal | 横向滚轮转动为 true,普通滚动为 false | |
IO_WheelX、IO_WheelY | 指针所在的位置 |
- 窗口 是窗口句柄,即 AutoHotkey 读作窗口 ID 的数字:
"ahk_id " IO_GestureWindow可在WinActivate、WinGetTitle和其他窗口函数中指定该窗口。 - 位置 是以物理像素为单位的屏幕坐标,从主显示器的左上角算起。在将它们用于 AutoHotkey 的鼠标函数之前,请先设置
CoordMode "Mouse", "Screen",否则这些函数是相对于活动窗口工作的。 - 文本 会原样传递;操作名称或组名称中的引号、反引号和换行符会自动转义。
- 触发器未提供的变量根本不会被设置,而 AutoHotkey 在读取未设置的变量时会停止脚本。有多种触发器的操作,或从不同操作调用的代码片段,应先检查
IO_TriggerKind,或使用IsSet(IO_GestureWindow)。
例如,一个由手势或热键运行的操作,将使用它的窗口置于前台并显示其标题:
CoordMode "Mouse", "Screen"
win := IO_TriggerKind = "Gesture" ? IO_GestureWindow : IO_HotkeyWindow
WinActivate "ahk_id " win
MsgBox WinGetTitle("ahk_id " win), IO_ActionName
插件脚本引擎
插件可以添加自己的脚本引擎。这时它会以插件的名称出现在 编写方式 下,您在那里键入的文本会原样传给插件;Input.Observer 不会检查它。如果没有正在运行的插件提供该引擎,页面会警告该操作在运行时会被跳过。请参阅插件。
在简单模式下
简单模式只为已经有脚本或 AutoHotkey 正文的操作显示 编写方式。对于其他任何操作,卡片会直接显示步骤。要将新操作编写为脚本,请将窗口切换到高级模式(配置窗口)。