Ein Thread pro Auslösung. Jedes ausgelöste Skript läuft in einem eigenen Thread, mit eigenen
Variablen und Aufzählungscaches. Zwei kurz nacheinander ausgelöste Gesten laufen gleichzeitig.
Eine benannte Sperre verhindert, dass sich ihre gemeinsame Arbeit
überschneidet. Ein serieller Monitor ist die Ausnahme: Seine Zeilen laufen nacheinander, in der
Reihenfolge ihres Eintreffens.
Ein Skript kann blockieren.UtilityWait, Meldungsfenster, ein ShellRunProgram, das auf das
Programmende wartet, und serielle Lesevorgänge blockieren nur den Thread ihres eigenen Skripts und
sonst nichts. Maus- und Tastatureingaben laufen weiter.
Beenden. Der Hotkey zum Beenden aller Aktionen und EngineStopAllActions() beenden jedes
laufende Skript bei seiner nächsten Anweisung, sodass sich eine Endlosschleife immer anhalten lässt.
UtilityWait, die Sperre und serielle Wartevorgänge, ein ShellRunProgram, das auf das
Programmende wartet, ShellShowToast, MultimediaPlayMp3File und UIShowConsole bemerken eine
Beendigungsanforderung auch während des Wartens. Die letzten vier geben dann false zurück, und
ShellRunProgram lässt das Programm weiterlaufen. Andere integrierte Funktionen beenden zuerst ihren aktuellen Aufruf.
Was zwischen Ausführungen erhalten bleibt:
Storage*: benannte Werte jedes Typs, von allen Skripts gemeinsam genutzt und im Speicher
gehalten, solange die Engine läuft. StorageGetValue für einen Namen, der nie gesetzt wurde,
gibt Integer 0 zurück. Er fasst bis zu 1.024 Werte, mit Namen bis zu 256 Zeichen und Text bis
zu 32.768 Zeichen; das Überschreiten einer Grenze beendet die Aktion mit einem Fehler.
Fenstereigenschaften (WindowSetPropertyInteger/…Text): an ein Fenster angehängte Werte, die
verschwinden, wenn es geschlossen oder Input.Observer beendet wird. Ein Textwert hat höchstens
1.024 Zeichen, und bis zu 512 Textwerte können gleichzeitig gespeichert sein.
Benannte Timer, Ordnerüberwachungen und serielle Monitore, die die Engine weiterlaufen lässt,
nachdem das Skript, das sie erstellt hat, beendet ist.
Als Text übergebene Skripts.TimerCreate, FolderWatchCreate und SerialMonitorCreate
übernehmen ein Skript als Text-Argument. Es wird bei jedem Auslösen eigenständig kompiliert und
ausgeführt, hat also frische Variablen und sieht die Variablen des Skripts, das es erstellt hat,
nicht. Anführungszeichen darin brauchen \"-Escapes; alternativ legen Sie das Skript in einem
Snippet ab und übergeben SnippetGetScript("name").
Kontext.Context*-Funktionen beschreiben, was die aktuelle Ausführung ausgelöst hat: die
Geste, ihre Punkte und ihr umgebendes Rechteck, das Fenster und Steuerelement darunter, die
Taste, das Überwachungsereignis oder die serielle Zeile. Das Skript eines Timers hat keinen
Auslöserkontext. Das Skript einer Ordnerüberwachung erhält die ContextGetWatch*-Werte, das eines
seriellen Monitors die ContextGetSerial*-Werte.
Snippets sind benannte Skripts in der Konfiguration. SnippetExecuteScript führt eines
vollständig aus, bevor der Aufrufer fortfährt, und gibt nur dann true zurück, wenn das Snippet
bis zum Ende gelaufen ist. Es teilt den Auslöserkontext des Aufrufers, hat aber
eigene Variablen.
Der abgesicherte Modus blockiert alle Skripts außer denen, die in der Diagnosekonsole
ausgeführt werden.