メインコンテンツまでスキップ

スクリプトの実行のしくみ

  • ディスパッチごとに 1 つのスレッド。 トリガーされた各スクリプトは専用のスレッドで実行され、独自の 変数と列挙キャッシュを持ちます。続けて実行された 2 つのジェスチャは同時に実行されます。 名前付きロックを使うと、共有する処理が交互に入り混じるのを防げます。シリアル モニターは 例外で、その行は届いた順に 1 つずつ実行されます。
  • スクリプトはブロックできます。 UtilityWait、メッセージ ボックス、終了を待つ ShellRunProgram、 シリアルの読み取りは、いずれも自身のスクリプトのスレッドだけをブロックし、それ以外には影響しません。マウスとキーボードの入力は 通常どおり処理され続けます。
  • 停止。 「すべてのアクションを停止」ホットキーと EngineStopAllActions() は、実行中のすべてのスクリプトを 次の命令で終了させるため、無限ループも必ず停止できます。UtilityWait、ロック、 シリアルの待機、終了を待つ ShellRunProgram、ShellShowToast、MultimediaPlayMp3File、 UIShowConsole も、待機中に停止要求を検出します。最後の 4 つはその場合 false を返し、ShellRunProgram は プログラムを実行したままにします。その他の組み込み関数は、現在の呼び出しを完了してから停止します。
  • 実行間で保持されるもの:
    • Storage*: 任意の種類の名前付きの値です。すべてのスクリプトで共有され、エンジンが実行されている間メモリに保持されます。 一度も設定されていない名前の StorageGetValue は Integer の 0 を返します。保持できる値は最大 1,024 個で、 名前は最大 256 文字、Text は最大 32,768 文字です。上限を超えると、エラーでアクションが停止します。
    • ウィンドウのプロパティ (WindowSetPropertyInteger/…Text): 1 つのウィンドウに関連付けられた値で、そのウィンドウが閉じたとき、 または Input.Observer が終了したときに消えます。テキスト値は最大 1,024 文字で、同時に格納できるテキスト値は最大 512 個です。
    • 名前付きのタイマー、フォルダー監視、シリアル モニター。これらは作成したスクリプトが終了した後もエンジンが実行し続けます。
  • Text として渡すスクリプト。 TimerCreate、FolderWatchCreate、SerialMonitorCreate は スクリプトを Text の引数として受け取ります。そのスクリプトは起動のたびに個別にコンパイルされてディスパッチされるため、 変数は毎回新しく、作成元のスクリプトの変数は参照できません。スクリプト内の引用符には \" のエスケープが必要です。 または、スクリプトをスニペットに入れておき、SnippetGetScript("name") を渡します。
  • コンテキスト。 Context* 組み込み関数は、現在の実行のきっかけとなったものを表します: ジェスチャ、その点と 外接する四角形、その下にあるウィンドウとコントロール、ボタン、監視イベント、シリアルの行などです。 タイマーのスクリプトにはトリガーのコンテキストがありません。フォルダー監視のスクリプトは ContextGetWatch* の値を、シリアル モニターのスクリプトは ContextGetSerial* の値を取得できます。
  • スニペット は構成に含まれる名前付きのスクリプトです。SnippetExecuteScript はスニペットを最後まで実行してから 呼び出し元に戻り、スニペットが最後まで実行された場合にだけ true を返します。スニペットは呼び出し元のトリガーのコンテキストを共有しますが、変数は独自に持ちます。
  • セーフ モード では、診断コンソールから実行したもの以外のすべてのスクリプトがブロックされます。