从步骤到脚本
何时切换到脚本
步骤能满足大多数操作。当您需要步骤无法容纳的内容时,请切换到脚本:
- 算术运算,例如将窗口从当前位置移动 100 像素;
- 用多个部分拼接文本,例如包含今天日期的文件名;
- 不通过中间变量,直接在一个内置函数的字段中调用另一个内置函数;
- 使用计数器的循环,例如“对前 5 个窗口中的每一个”。
切换永远不会丢失您的步骤:操作会同时保存其步骤正文和脚本正文(步骤、脚本和 AutoHotkey)。
代码视图
备注
高级模式。 步骤编辑器末尾的 查看代码 会以文本形式(即步骤的存储形式)显示步骤。隐藏代码 会再次将其隐藏。每次选择另一个操作时,它都会以隐藏状态开始。
原始步骤文本。在此处编辑会重建上方的步骤行;步骤行无法显示的内容只能在此处编辑。
2[[steps]] id = 1 op = "call" fn = "KeyboardPressKeyCombo" args = ["^W"]
- 在代码视图 ② 中编辑后,只要文本有效,上方的步骤行就会立即重建。
- 当文本无法以行的形式显示时(例如因为它使用了“转到步骤”形式的 如果),编辑器会显示代码而不带 查看代码 链接,因为这时它是编辑这些步骤的唯一方式。步骤行会被一条说明原因的消息取代(问题)。
- 编辑器永远不会改写它无法以行显示的文本。一旦您编辑了步骤行,文本中的注释将不会保留。
文本形式本身、每种步骤及其字段在步骤引擎中介绍。
将步骤转换为脚本
- 在 编写方式 下选择 脚本。
- 如果该操作有步骤且其脚本正文为空,是否将步骤转换为脚本? 会询问是否转换它们。单击 转换。
- 转换结果会出现在脚本编辑器中。请在那里检查并完善它。
当这些步骤是在 录制器 页面上制作的录制时,对话框还会补充:这些步骤是一段录制。转换为脚本后,它们会忽略录制器的“回放速度”和“回放鼠标路径细节”:等待按录制时的速度执行,并且会回放每一次录制的鼠标移动。(回放设置)
转换是单向的。步骤会保持原样,因此切换回 步骤 会看到它们没有变化,但没有任何方法可以将脚本转换回步骤。
在以下情况下不会提供转换:
- 脚本正文中已经有文本(否则会被覆盖);
- 步骤无法以行的形式显示;
- 任何步骤是 当…时重复、重复直到、退出循环 或 停止步骤。脚本只有计数循环,没有任何用于退出循环或提前结束操作的内容。
每种步骤会变成什么
| 步骤 | 脚本 |
|---|---|
| 内置函数步骤 | 一条语句,WindowMaximize(window); |
| 带有 将结果另存为 的步骤 | name = Builtin(…); |
| 设置变量 | name = value; |
字段中的 $name | 不带 $ 的名称,name |
| 目标窗口 之类的读取值 | 对应的调用,ContextGetWindow() |
文本字段以外的命名常量,例如 MouseButton.Primary | 名称原样保留 |
| 文本 | 带引号的字符串,反斜杠和引号会被转义 |
| 空字段 | 该类型的空值,例如 0 或 "" |
| 如果 / 否则 / 结束如果 | if (…) { … } else { … } |
| 比较 | a == b 及其他运算符;反转结果 会变为 !(…) |
| 重复指定次数 | 一个 for 循环,计数器名为 i(如果 i 已被占用,则为 i2 等) |
例如,最大化或还原示例会变成:
window = ContextGetWindow();
if (WindowIsMaximized(window)) {
WindowRestore(window);
} else {
WindowMaximize(window);
}
需要注意一个差异:在步骤中,在任何步骤保存某个变量之前就使用它,会读取为 0。在脚本中,变量必须在文本中首次使用之前赋值,否则脚本无法编译(变量)。
录制
宏录制器也会以步骤形式显示录制内容,并提供一个以相同方式转换它的 脚本 按钮。保持为步骤的录制遵循 回放速度 设置;转换后的录制则按录制时的样子播放。