본문으로 건너뛰기

스크립트 실행 방식

  • 디스패치마다 스레드 하나. 트리거된 각 스크립트는 자체 변수와 열거 캐시를 가진 자체 스레드에서 실행됩니다. 연달아 실행된 두 제스처는 동시에 실행됩니다. 이름 있는 잠금을 사용하면 공유 작업이 서로 섞이지 않습니다. 직렬 모니터는 예외로, 그 줄들은 도착한 순서대로 한 번에 하나씩 실행됩니다.
  • 스크립트는 차단될 수 있습니다. UtilityWait, 메시지 상자, 종료될 때까지 기다리는 ShellRunProgram, 직렬 읽기는 모두 해당 스크립트의 스레드만 차단하며 다른 것은 차단하지 않습니다. 마우스와 키보드 입력은 계속 전달됩니다.
  • 중지. 모든 작업 중지 단축키와 EngineStopAllActions()는 실행 중인 모든 스크립트를 다음 명령에서 종료하므로, 무한 루프도 항상 중지할 수 있습니다. UtilityWait, 잠금, 직렬 대기, 종료될 때까지 기다리는 ShellRunProgram, ShellShowToast, MultimediaPlayMp3File, UIShowConsole도 기다리는 동안 중지 요청을 감지합니다. 마지막 네 가지는 이때 false를 반환하며, ShellRunProgram은 프로그램을 계속 실행되도록 둡니다. 다른 기본 제공 함수는 현재 호출을 먼저 마칩니다.
  • 실행 간에 유지되는 항목:
    • Storage*: 모든 스크립트가 공유하는 형식 제한 없는 이름 있는 값으로, 엔진이 실행되는 동안 메모리에 보관됩니다. 한 번도 설정하지 않은 이름에 대한 StorageGetValue는 Integer 0을 반환합니다. 최대 1,024개의 값을 보관하며, 이름은 최대 256자, Text는 최대 32,768자입니다. 한도를 넘으면 작업이 오류로 중지됩니다.
    • 창 속성(WindowSetPropertyInteger/…Text): 한 창에 연결된 값으로, 창이 닫히거나 Input.Observer가 종료되면 사라집니다. 텍스트 값은 최대 1,024자이며, 한 번에 최대 512개의 텍스트 값을 저장할 수 있습니다.
    • 이름 있는 타이머, 폴더 감시, 직렬 모니터: 만든 스크립트가 끝난 뒤에도 엔진이 계속 실행합니다.
  • Text로 전달되는 스크립트. TimerCreate, FolderWatchCreate, SerialMonitorCreate는 스크립트를 Text 인수로 받습니다. 이 스크립트는 실행될 때마다 따로 컴파일되고 디스패치되므로 새 변수를 가지며, 자신을 만든 스크립트의 변수를 볼 수 없습니다. 그 안의 따옴표에는 \" 이스케이프가 필요합니다. 또는 스크립트를 코드 조각에 두고 SnippetGetScript("name")을 전달하십시오.
  • 컨텍스트. Context* 기본 제공 함수는 현재 실행을 트리거한 대상을 설명합니다. 제스처, 그 점과 경계 상자, 그 아래의 창과 컨트롤, 단추, 감시 이벤트, 직렬 줄이 이에 해당합니다. 타이머의 스크립트에는 트리거 컨텍스트가 없습니다. 폴더 감시의 스크립트는 ContextGetWatch* 값을, 직렬 모니터의 스크립트는 ContextGetSerial* 값을 받습니다.
  • 코드 조각은 구성에 저장된 이름 있는 스크립트입니다. SnippetExecuteScript는 코드 조각을 끝까지 실행한 다음 호출한 스크립트를 계속하며, 코드 조각이 끝까지 실행된 경우에만 true를 반환합니다. 코드 조각은 호출자의 트리거 컨텍스트를 공유하지만 자체 변수를 가집니다.
  • 안전 모드에서는 진단 콘솔에서 실행한 스크립트를 제외한 모든 스크립트가 차단됩니다.