步骤编辑器报告的问题
步骤编辑器会在您编辑时检查步骤。其消息出现在四个位置:字段下方、步骤行上的标记、列表下方的 步骤未保存:,以及当步骤无法以行显示时取代列表的位置。
字段下方
有问题的字段会在您键入时显示红色边框,并在其下方显示消息。当字段中包含未通过检查的键入文本时,步骤不会被保存:列表下方会显示 步骤未保存:步骤 N 有一个无效的字段,在您修复该字段之前,操作会保留其上次保存的步骤(步骤未保存)。
空字段不会显示任何消息,也不会阻止保存;步骤会以空字段保存。操作运行时,数字、真或假或窗口字段为空的步骤会使操作在此处停止,控制台的 系统 输出会说明该参数的类型错误。空的文本字段会作为空文本运行,对于某些内置函数(文件名、要查找的窗口标题)而言,这意味着该步骤什么也不做。
| 消息 | 原因 | 解决方法 |
|---|---|---|
| 此值为必填项。 | 设置变量 步骤的变量名称为空。 | 键入一个名称。 |
| 请输入整数(十进制或 0x 十六进制)、命名常量,或一个 $变量。 | 整数字段或 次数 中包含其他内容,例如 2.5 或 ten。 | 键入数字(可带负号)、0x 加十六进制数,或命名常量(例如 VirtualKey.F5)(步骤参数)。 |
| 不存在此名称的命名常量。请检查拼写和大小写,例如 VirtualKey.MediaPlayPause。 | 整数或数字字段,或 次数 中包含一个带点的名称(例如 VirtualKey.Mediaplaypause),但它不是命名常量。 | 更正名称。大小写有区别。名称列在命名常量中。 |
| 请输入数字,或一个 $变量。 | 数字字段中包含的不是数字。 | 使用句点作为小数点,不使用千位分隔符:1234.5。 |
| 请输入 true 或 false,或一个 $变量。 | 设置变量 步骤的 真或假 值中包含其他内容。 | 键入 true 或 false。 |
| 步骤不能在参数内运行内置函数。请先将其移入变量。 | 字段中包含一个括号内有内容的内置函数调用,例如 WindowGetTitle($w)。 | 单击字段下方的 移入变量(步骤参数)。如果没有提供该链接,请自行为该调用添加一个步骤,保存其结果,然后使用该变量。 |
| 请使用字母、数字和 _,且不能以数字开头。 | 将结果另存为 或 变量 中的变量名称包含其他字符,或以数字开头。 | 重命名它(变量)。 |
| 此名称为保留名称。请另选一个。 | 变量名称是 if、else、for、true 或 false。 | 另选一个名称。 |
| 请选择要检查其结果的内置函数。 | 设为 内置函数的结果 的条件尚未选择内置函数。 | 单击 选择内置函数… 并选择一个。 |
| “…”不能用于组合键。 | 按键 框收到了组合键无法表示的按键,例如媒体键。 | 使用其他按键,或使用 按下并释放键 步骤(KeyboardPressKey)(媒体键)。 |
当调用无法读取时(例如它包含 + 之类的运算符),或者在 当…时重复 或 重复直到 的条件中,不会提供 移入变量。
有一条说明不是问题:当 设置变量 的值类型为 文本,并且是一个括号内有内容的内置函数调用(例如 WindowGetTitle($w))时,其下方会显示 此内容作为文本存储,不会运行。若要保留内置函数的结果,请在该内置函数的步骤上使用“将结果另存为”。 该值会按这些字符原样保存。括号为空的调用(例如 ClipboardGetText())不会显示说明:它是值菜单中的一个读取值(变量)。
步骤行上
| 标记 | 原因 | 解决方法 |
|---|---|---|
| 不在重复块内 | 退出循环 步骤位于所有重复之外,通常是在移动之后。它在那里时操作无法运行。 | 将其移回某个重复内,或将其删除(重复步骤)。 |
步骤未保存
步骤未保存: 后跟原因,表示编辑器无法将您的步骤行写回操作。在您修复之前,操作会保留其上次保存的步骤,您的其余编辑也会等待。
| 原因 | 产生原因 | 解决方法 |
|---|---|---|
| 某个条件未选择内置函数 | 如果 或 当…时重复/重复直到 设为 内置函数的结果,但没有内置函数。 | 选择内置函数,或将 检查 切换为其他类型。 |
| 某个条件的 value 是调用(…);需要先将其赋给变量 | 条件的 值 或比较的某一侧包含一个带参数的内置函数调用。 | 在上方添加一个以 将结果另存为 运行该调用的步骤,并在条件中使用该变量。 |
| 内置函数 的参数 N 是调用(…);需要先将其赋给变量 | 步骤的字段中包含一个带参数的内置函数调用。N 从 1 开始计数步骤的字段。 | 移入变量(步骤参数)。 |
| 步骤 N 有一个无效的字段 | 步骤 N 的某个字段中包含未通过检查的键入文本(字段下方):整数或数字字段中的 abc、不是命名常量的名称、包含其他文本的真或假字段、无效的 次数,或不允许的变量名称。空字段永远不会导致此问题。N 从 1 开始计数步骤。 | 修复消息所在的字段。 |
步骤无法以列表显示时
有时步骤以步骤列表无法显示的文本形式存在:它们是在代码视图中编辑的、导入的,或在配置文件中手动编写的。这时列表会被以下内容取代:
这些步骤使用了无法以列表形式显示的流程控制(原因)。可以在高级模式下以代码形式编辑。
这会发生在每个步骤编辑器中:操作的、代码片段的、沙盒 的、应用程序组的前置和后置操作的,以及全局事件的。
这些步骤仍会按原样运行;只是编辑器无法将它们显示为行。在高级模式下,代码视图会显示该文本,并且这是编辑它的唯一方式(代码视图)。一旦文本重新具有列表形式,步骤行就会回来。文本形式在步骤引擎中介绍。
原因 为以下之一。斜体文字 表示原因所引用的您文本中的部分。
整个文本
| 原因 | 在文本中要修复的内容 |
|---|---|
| 步骤不是有效的 TOML:消息 | 文本不是有效的 TOML。消息会指出位置。 |
| 没有 [[steps]] 数组 | 文本中没有 [[steps]] 表。 |
| 顶层键 键 不是简单值 | 第一个 [[steps]] 之上的某个键包含表或列表。那里只能放简单值。 |
| 某个步骤使用了 op op,它没有列表形式 | 某个步骤的 op 是列表无法显示的类型。 |
| 某个步骤使用了 if 的 goto 形式,它没有列表形式 | 某个 if 使用 then_goto 或 else_goto 跳转,或者存在 goto 步骤。请用 if 块和 end_if 改写,或继续以文本形式编辑。 |
| 某个 if 步骤没有条件 | 某个 if 步骤没有 condition。 |
单个步骤
| 原因 | 在文本中要修复的内容 |
|---|---|
| 某个 call 步骤没有 fn | 某个 call 步骤未指定内置函数。 |
| 某个 set 步骤没有 local | 某个 set 步骤未指定变量。 |
| 某个 set 步骤的 call 没有 fn | 某个 set 步骤的 call 未指定内置函数。 |
| 某个 set 步骤的 value 不是单个值 | 某个 set 步骤的 value 是列表,或者是读取值({ fn = "Name" })或命名常量({ const = "Namespace.Name" })以外的表。 |
| 某个 set 步骤的 value 是文本 文本,列表会将其保存为该内置函数的结果 | 某个 set 步骤的 value 是一个可解读为读取值的带引号文本,例如 "ClipboardGetText()"。要存储该读取值的结果,请写成 { fn = "ClipboardGetText" };否则请更改文本。 |
| 某个 set 步骤既没有 value 也没有 call | 某个 set 步骤没有要存储的内容。 |
| repeat 步骤需要 times、while 或 until 中的恰好一个 | 某个 repeat 步骤一个都没有,或者有多个。 |
| 某个 repeat 步骤的 times 是以文本存储的数字、命名常量或内置函数调用,列表会将其保存为数字、常量或该内置函数的结果 | times 用引号书写,例如 "3"、"MouseButton.Middle" 或 "MouseGetCursorX()"。请将数字写成不带引号的形式,将常量写成 { const = "MouseButton.Middle" },将读取值写成 { fn = "MouseGetCursorX" }。 |
| 某个 repeat 步骤的 times 既不是整数也不是文本 | times 是 2.5 或 true 之类的值。 |
| 某个条件不是表 | condition、while 或 until 不是表。 |
| 条件需要 fn、value 或 compare 中的恰好一个 | 条件一个都没有,或者有多个。 |
| 某个条件的 not 既不是 true 也不是 false | not 包含 true 或 false 以外的内容。 |
| 某个条件的 fn 为空 | 条件的 fn 为空文本。 |
| 某个条件的 compare 不是受支持的比较 | compare 不是 ==、!=、<、<=、>、>= 之一。 |
| 比较需要同时有 left 和 right | 比较缺少 left 或 right。 |
| 某个条件的操作数不是单个值 | value、left 或 right 是列表,或者是读取值或命名常量以外的表。 |
| 某个条件比较文本 文本,列表会将其保存为数字、命名常量、true/false 或内置函数的结果 | 被比较的值用引号书写,但可解读为数字、命名常量、true/false 或读取值,例如 "3"、"MouseButton.Left" 或 "ClipboardGetText()"。列表无法将其保留为文本。请将读取值写成 { fn = "ClipboardGetText" },或更改文本。 |
| args 不是数组 | 某个步骤的 args 不是列表。 |
| 某个参数不是单个值 | 某个参数是列表,或者是读取值({ fn = "Name" })或命名常量({ const = "Namespace.Name" })以外的表。 |
| 某个值指定了不存在的常量 文本 | { const = "…" } 包含的名称不是命名常量,或者不是文本。请更正名称;大小写有区别。 |
不匹配的块
N 是步骤的位置,从 1 开始计数。
| 原因 | 在文本中要修复的内容 |
|---|---|
| 步骤 N 是 if 块之外的 else | 一个之前没有已打开 if 的 else。 |
| 步骤 N 是同一 if 块中的第二个 else | 一个 if 块有两个 else 步骤。 |
| 步骤 N 关闭了一个未打开的块 | 一个没有对应已打开块的 end_if 或 end_repeat。 |
| 步骤 N 打开的块从未关闭 | 一个没有 end_if 或 end_repeat 的 if 或 repeat。 |
编辑器周围的通知
| 通知 | 含义 |
|---|---|
| 此方式下尚未设置任何内容,因此运行时不会执行任何操作。“方式”中的内容会保留,但不会运行。 | 编写方式 设为一个空的方式,而另一种方式有内容。单击 使用“<方式>” 即可切换回去(步骤、脚本和 AutoHotkey)。 |
| AutoHotkey 支持已在常规设置中关闭,因此在启用之前此操作不会执行任何内容。 | 该操作以 AutoHotkey 方式运行,而 AutoHotkey 已关闭(AutoHotkey)。 |
| 没有已注册的插件提供“引擎”引擎,因此此脚本在运行时会被跳过。请在“插件”页面上添加该插件,或选择其他方式。 | 该操作在某个插件的引擎上运行,而该插件未注册(插件)。 |