Pular para o conteúdo principal

O mecanismo Passos

Uma ação cujo mecanismo é Passos é uma lista TOML de tabelas [[steps]] em vez de texto. Ela chama as mesmas funções internas e segue as mesmas regras de valor e de valor verdadeiro. As diferenças:

  • Cada passo tem um id inteiro único e um op: call (fn, args), set (local mais um value, ou um call = { fn, args }), if, goto, end, repeat/end_repeat, exit_repeat, else/end_if.

  • Um if salta por id (then_goto/else_goto) ou, sem eles, abre um bloco fechado por end_if.

  • repeat recebe exatamente um entre times, while e until.

  • Uma condição é exatamente uma entre: uma chamada de função interna (fn/args), value (valor verdadeiro) ou compare ("==", "!=", "<", "<=", ">", ">=") com left/right. Acrescente not = true para invertê-la.

  • Um argumento de cadeia que começa com $ lê uma variável ("$target"). Todo o resto é um literal cujo tipo é o seu tipo TOML, e esse tipo precisa corresponder exatamente ao parâmetro, como em Script.

  • { const = "VirtualKey.MediaPlayPause" } é uma constante nomeada, substituída pelo seu número quando os passos são compilados, como em Script. Uma cadeia comum escrita do mesmo jeito, como "VirtualKey.F5", continua sendo texto.

  • { fn = "MouseGetCursorX" }, uma tabela que contém só fn, é o resultado de uma função interna que não recebe argumentos. Ela é aceita em qualquer lugar onde cabe um valor:

    • nos args de uma chamada: args = [{ fn = "WindowGetActive" }]
    • em left/right de uma condição: left = { fn = "ContextGetPointCount" }, right = 20
    • no value de uma condição: value = { fn = "EngineIsSafeMode" }
    • no times de um repeat: times = { fn = "FolderWatchGetCount" }
    • no value de um passo set: value = { fn = "UtilityGetTickCount" }

    Ela não recebe args. Para uma função interna que precisa de argumentos, guarde antes o resultado dela numa variável com set e passe "$name".

  • Não há expressões com operadores. Aritmética e montagem de cadeias precisam de uma ação 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"