Перейти к основному содержимому

Движок «Шаги»

Действие с движком Шаги — это TOML-список таблиц [[steps]] вместо текста. Оно вызывает те же встроенные функции и следует тем же правилам значений и истинности. Отличия:

  • У каждого шага есть уникальный целочисленный id и op: call (fn, args), set (local плюс value или call = { fn, args }), if, goto, end, repeat/end_repeat, exit_repeat, else/end_if.

  • if либо переходит по id (then_goto/else_goto), либо, без них, открывает блок, закрываемый end_if.

  • repeat принимает ровно одно из times, while или until.

  • Условие — ровно одно из: вызов встроенной функции (fn/args), value (истинность) или compare ("==", "!=", "<", "<=", ">", ">=") с left/right. Добавьте not = true, чтобы инвертировать его.

  • Строковый аргумент, начинающийся с $, читает переменную ("$target"). Всё остальное — литерал, тип которого определяется его типом в TOML, и этот тип должен точно совпадать с параметром, как в Script.

  • { const = "VirtualKey.MediaPlayPause" } — именованная константа, которая заменяется своим числом при компиляции шагов, как в Script. Обычная строка с таким же написанием, например "VirtualKey.F5", остаётся текстом.

  • { fn = "MouseGetCursorX" } — таблица, содержащая только fn, — это результат встроенной функции без аргументов. Она допустима везде, где допустимо значение:

    • в args вызова: args = [{ fn = "WindowGetActive" }]
    • в left/right условия: left = { fn = "ContextGetPointCount" }, right = 20
    • в value условия: value = { fn = "EngineIsSafeMode" }
    • в times у repeat: times = { fn = "FolderWatchGetCount" }
    • в value шага set: value = { fn = "UtilityGetTickCount" }

    args у неё нет. Для встроенной функции, которой нужны аргументы, сначала сохраните её результат в переменную шагом set и передайте "$name".

  • Выражений с операторами нет. Для арифметики и построения строк нужно действие Script.

[[steps]]
id = 1
op = "set"
local = "target"
call = { fn = "WindowGetActive", args = [] }

[[steps]]
id = 2
op = "if"
condition = { fn = "WindowContainsTitle", args = ["$target", "Notepad"] }

[[steps]]
id = 3
op = "call"
fn = "WindowMaximize"
args = ["$target"]

[[steps]]
id = 4
op = "end_if"