この質問は、 「コマンド ラインからスクリプトを呼び出す」という質問に触発されたものです。
DigitalMicrograph 以外のアプリケーションで「トリガー イベント」に作用するスクリプトを作成するにはどうすればよいですか?
つまり、一部のスクリプト機能は、外部アプリケーションによってトリガーされる必要があります。
この質問は、 「コマンド ラインからスクリプトを呼び出す」という質問に触発されたものです。
つまり、一部のスクリプト機能は、外部アプリケーションによってトリガーされる必要があります。
スクリプト言語は、現在の状態では多くの「外部」インターフェースを提供していません。コマンドを使用して外部プロセスを呼び出しLaunchExternalProcess
、プロセスが完了するのを待つことは可能ですが、外部プロセスが呼び出す直接的な方法、つまり DigitalMicrograph 内でスクリプト アクションを開始する方法はありません。
ただし、システムのファイル システムをメッセージ キューとして使用することで、この問題を回避することができます。これを行うには、特定のファイルが存在するかどうかを定期的にチェックするスクリプトをバックグラウンドで実行し、外部アプリケーションが DigitalMicrograph でスクリプト アクションをトリガーするときにそのようなファイルを作成するようにします。ファイルの内容 (単純なテキスト ファイルの場合) は、2 つのアプリケーション間で情報を転送するためにも使用できます。
Trigger.txt
ファイルがルート フォルダに表示されるまで待機するスクリプトの例を次に示します。チェックは 10 秒ごとに実行されます。
class WaitForExternal
{
string triggerFilePath
number taskID
void WaitOnTrigger( object self )
{
if ( DoesFileExist( triggerFilePath ) )
{
Result( GetTime(1) + ": Triggered! Now act..." )
If ( TwoButtonDialog( "Do you want to reset the trigger?", "Reset", "Stop" ) )
{
DeleteFile( triggerFilePath )
}
else
{
RemoveMainThreadTask( taskID )
}
}
else
{
Result( GetTime(1) + ": not yet\n" )
}
}
object Init( object self, string triggerPath, number waitSec )
{
triggerFilePath = triggerPath
taskID = self.AddMainThreadPeriodicTask( "WaitOnTrigger", waitSec )
return self
}
}
// Main script
{
string triggerPath = "C:\\Trigger.txt"
number pollingWait = 10
Alloc(WaitForExternal).Init( triggerPath, pollingWait )
}
定期的なタスクは、CPU に干渉することなくバックグラウンドでアイドル状態で待機しますが、実際のチェックはメイン スレッドで実行されることに注意してください。