Движок «Шаги»
Действие с движком Шаги — это 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"