Zum Hauptinhalt springen

Die Schritte-Engine

Eine Aktion, deren Engine Schritte ist, ist eine TOML-Liste von [[steps]]-Tabellen statt Text. Sie ruft dieselben integrierten Funktionen auf und folgt denselben Regeln für Werte und Wahrheitswerte. Die Unterschiede:

  • Jeder Schritt hat eine eindeutige ganzzahlige id und eine op: call (fn, args), set (local plus ein value oder ein call = { fn, args }), if, goto, end, repeat/end_repeat, exit_repeat, else/end_if.

  • Ein if springt entweder per id (then_goto/else_goto) oder öffnet ohne diese einen Block, der mit end_if geschlossen wird.

  • repeat nimmt genau eines von times, while oder until an.

  • Eine Bedingung ist genau eines der folgenden: ein Aufruf einer integrierten Funktion (fn/args), value (Wahrheitswert) oder compare ("==", "!=", "<", "<=", ">", ">=") mit left/right. Fügen Sie not = true hinzu, um sie umzukehren.

  • Ein Zeichenfolgenargument, das mit $ beginnt, liest eine Variable ("$target"). Alles andere ist ein Literal, dessen Typ sein TOML-Typ ist, und dieser Typ muss genau zum Parameter passen, wie bei Skript.

  • { const = "VirtualKey.MediaPlayPause" } ist eine benannte Konstante, die beim Kompilieren der Schritte durch ihre Zahl ersetzt wird, wie bei Skript. Eine gewöhnliche Zeichenfolge mit derselben Schreibweise, etwa "VirtualKey.F5", bleibt Text.

  • { fn = "MouseGetCursorX" }, eine Tabelle, die nur fn enthält, ist das Ergebnis einer integrierten Funktion ohne Argumente. Sie ist überall zulässig, wo ein Wert steht:

    • in den args eines Aufrufs: args = [{ fn = "WindowGetActive" }]
    • in left/right einer Bedingung: left = { fn = "ContextGetPointCount" }, right = 20
    • im value einer Bedingung: value = { fn = "EngineIsSafeMode" }
    • in times eines repeat: times = { fn = "FolderWatchGetCount" }
    • im value eines set-Schritts: value = { fn = "UtilityGetTickCount" }

    Sie nimmt keine args an. Für eine integrierte Funktion, die Argumente braucht, legen Sie ihr Ergebnis zuerst mit set in einer Variablen ab und übergeben "$name".

  • Es gibt keine Operatorausdrücke. Arithmetik und das Zusammensetzen von Zeichenfolgen erfordern eine Skript-Aktion.

[[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"