Saltar al contenido principal

El motor Pasos

Una acción cuyo motor es Pasos es una lista TOML de tablas [[steps]] en lugar de texto. Llama a las mismas funciones integradas y sigue las mismas reglas de valores y de veracidad. Las diferencias:

  • Cada paso tiene un id entero único y un op: call (fn, args), set (local más un value, o un call = { fn, args }), if, goto, end, repeat/end_repeat, exit_repeat, else/end_if.

  • Un if salta por id (then_goto/else_goto) o, sin ellos, abre un bloque que cierra end_if.

  • repeat recibe exactamente uno de times, while o until.

  • Una condición es exactamente una de estas: una llamada a función integrada (fn/args), value (veracidad) o compare ("==", "!=", "<", "<=", ">", ">=") con left/right. Agregue not = true para invertirla.

  • Un argumento de cadena que empieza con $ lee una variable ("$target"). Todo lo demás es un literal cuyo tipo es su tipo TOML, y ese tipo debe coincidir exactamente con el del parámetro, igual que en Script.

  • { const = "VirtualKey.MediaPlayPause" } es una constante con nombre, que se reemplaza por su número al compilar los pasos, igual que en Script. Una cadena simple escrita igual, como "VirtualKey.F5", sigue siendo texto.

  • { fn = "MouseGetCursorX" }, una tabla que solo contiene fn, es el resultado de una función integrada que no recibe argumentos. Se acepta en cualquier lugar donde va un valor:

    • en los args de una llamada: args = [{ fn = "WindowGetActive" }]
    • en left/right de una condición: left = { fn = "ContextGetPointCount" }, right = 20
    • en el value de una condición: value = { fn = "EngineIsSafeMode" }
    • en el times de un repeat: times = { fn = "FolderWatchGetCount" }
    • en el value de un paso set: value = { fn = "UtilityGetTickCount" }

    No recibe args. Para una función integrada que necesita argumentos, guarde primero su resultado en una variable con set y pase "$name".

  • No hay expresiones con operadores. La aritmética y la construcción de cadenas necesitan una acción 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"