跳到主要内容

步骤、脚本和 AutoHotkey

操作要执行的内容可以用三种方式编写。操作 页面 执行内容 卡片上的 编写方式 用于选择运行哪一种。

执行内容
编写方式
步骤脚本AutoHotkey
每种方式各自保留其内容。只有所选的方式会运行。
方式是什么何时选择
步骤由您选择并填写的步骤组成的列表,每个步骤一行。无需键入代码。您希望在不编写代码的情况下构建操作。大多数操作都适用:发送按键、键入文本、移动或关闭窗口、等待、提问。
脚本Input.Observer 自己的脚本语言,在代码编辑器中键入。您需要算术运算、用多个部分拼接文本、用变量计数的循环,或任何步骤无法表达的内容。
AutoHotkey一个 AutoHotkey v2 脚本,由 AutoHotkey 本身运行。您已经有 AutoHotkey 代码,或者需要只有 AutoHotkey 才能做到的事情。

步骤和脚本在 Input.Observer 内部运行,并调用相同的内置函数:步骤是以可视化方式编写脚本所要做的事情。请参阅步骤和脚本语言参考。

每种方式保留自己的内容​

一个操作同时保存步骤正文、脚本正文和 AutoHotkey 正文。切换 编写方式 ① 会改变运行哪一个。它永远不会删除其他正文,因此您可以切换回来。

如果您选择的方式为空而另一种方式有内容,开关下方会显示一条通知,说明运行该操作不会执行任何事情,并提供一个按钮来使用有内容的那种方式。

从步骤切换到脚本​

当操作有步骤且其脚本正文为空时,从 步骤 切换到 脚本,Input.Observer 会提议转换这些步骤:是否将步骤转换为脚本? 选择 转换 可将转换结果放入脚本编辑器。

  • 步骤保持原样。切换回 步骤 会看到它们没有变化。
  • 没有反向转换。脚本无法转换为步骤。
  • 使用了 当…时重复、重复直到、退出循环 或 停止步骤 的步骤不会提供转换,因为脚本中没有对应的语句。您仍然可以切换;只是脚本正文会从空白开始。
  • 永远不会与 AutoHotkey 相互转换。
  • 当这些步骤是来自 录制器 页面的录制内容时,对话框还会说明脚本会忽略 回放速度 和 回放鼠标路径细节:其等待按录制时的速度运行,并且会回放每一次录制的鼠标移动(录制器设置)。

从步骤到脚本展示了每种步骤会变成什么。

AutoHotkey​

AutoHotkey 是一个独立的程序,Input.Observer 会在运行 AutoHotkey 操作时启动它。它不随附提供;您需要自行安装 AutoHotkey v2,并告诉 Input.Observer 它在哪里。

  1. 安装 AutoHotkey v2。
  2. 在 常规 页面上,打开 启用 AutoHotkey,并将 AutoHotkey 可执行文件 设置为其程序文件,例如 AutoHotkey64.exe。
  3. 现在 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 正文的操作显示 编写方式。对于其他任何操作,卡片会直接显示步骤。要将新操作编写为脚本,请将窗口切换到高级模式(配置窗口)。