본문으로 건너뛰기

단계 엔진

엔진이 단계인 작업은 텍스트 대신 [[steps]] 테이블의 TOML 목록입니다. 같은 기본 제공 함수를 호출하며 같은 값 규칙과 참/거짓 판정 규칙을 따릅니다. 차이점은 다음과 같습니다.

  • 각 단계에는 고유한 정수 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(참/거짓 판정), 또는 left/right와 함께 쓰는 compare("==", "!=", "<", "<=", ">", ">="). 조건을 반전하려면 not = true를 추가합니다.

  • $로 시작하는 문자열 인수는 변수를 읽습니다("$target"). 그 밖의 모든 값은 TOML 형식이 곧 값의 형식인 리터럴이며, 스크립트에서와 마찬가지로 그 형식이 매개 변수와 정확히 일치해야 합니다.

  • { const = "VirtualKey.MediaPlayPause" }는 명명된 상수이며, 스크립트에서와 마찬가지로 단계를 컴파일할 때 해당 숫자로 바뀝니다. "VirtualKey.F5"처럼 같은 철자의 일반 문자열은 텍스트로 남습니다.

  • { fn = "MouseGetCursorX" }처럼 fn만 있는 테이블은 인수를 받지 않는 기본 제공 함수의 결과입니다. 값이 들어갈 수 있는 곳이면 어디서나 쓸 수 있습니다.

    • 호출의 args: args = [{ fn = "WindowGetActive" }]
    • 조건의 left/right: left = { fn = "ContextGetPointCount" }, right = 20
    • 조건의 value: value = { fn = "EngineIsSafeMode" }
    • repeat의 times: times = { fn = "FolderWatchGetCount" }
    • set 단계의 value: value = { fn = "UtilityGetTickCount" }

    args는 받지 않습니다. 인수가 필요한 기본 제공 함수는 먼저 set으로 결과를 변수에 저장한 뒤 "$name"을 전달합니다.

  • 연산자 식은 없습니다. 산술과 문자열 조합에는 스크립트 작업이 필요합니다.

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