这个问题的灵感来自'Call script from command line'问题。
如何编写一个脚本来作用于DigitalMicrograph 以外的应用程序中的“触发事件”?
即某些脚本功能应该由外部应用程序触发。
这个问题的灵感来自'Call script from command line'问题。
即某些脚本功能应该由外部应用程序触发。
脚本语言在其当前状态下不提供许多“外部”接口。可以使用命令调用外部进程LaunchExternalProcess
并等待进程完成,但没有直接的方法可以让外部进程调用,即在 DigitalMicrograph 中启动脚本操作。
但是,可以通过将系统的文件系统用作消息队列来解决该问题。为此,请在后台运行一个脚本,该脚本定期检查某个文件是否存在,并让外部应用程序在要触发 DigitalMicrograph 中的脚本操作时创建此类文件。文件内容——如果它是一个简单的文本文件——也可以用来在两个应用程序之间传输信息。
这是一个示例脚本,它将等待文件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,但实际检查是在主线程上执行的。