为什么AppleScript“tell”命令在后台运行我的GUI应用程序的非GUI实例?

时间:2009-08-24 17:20:21

标签: objective-c cocoa applescript

我正在编写一个标准的Cocoa应用程序,我刚刚开始为它实现AppleScript支持。我为我的顶级应用程序脚本类定义并实现了一个名为testprop的属性,并且访问它的工作正常:如果我启动了我的应用程序的实例并在脚本编辑器中运行以下AppleScript,我得到了输出我期望:

tell application "MyApp"
    testprop
end tell

但是,如果我在我的应用程序未运行时在脚本编辑器中运行这个相同的AppleScript,它将返回此属性的最后一个已知值,并继续返回以用于后续调用。我没有看到我的应用程序的实例在GUI中的任何地方开始。

在我注意到这一点之后,我在shell中运行了"ps xawww | grep MyApp",它告诉我使用我的应用程序的主可执行文件创建了一个进程,其参数类似于:-psn_0_323663(每次开始此过程时,最后的数字都会发生变化 - 我认为这是AppleScript(以及其他)用来跟踪和控制过程的“过程序列号”。

这里发生了什么?如何防止这种情况发生(例如,当AppleScript“告诉”命令运行时,启动我的应用程序作为完整,正确的启用GUI的实例)?

编辑:

以上似乎只出现在我的笔记本电脑上。当我在我的Mac Mini上尝试完全相同的东西时(OS版本在两者上都是相同的:10.5.8),我只是收到一条错误消息:

$ osascript -e "tell application \"MyApp\"" -e "testprop" -e "end tell"
26:40: execution error: The variable testprop is not defined. (-2753)

1 个答案:

答案 0 :(得分:2)

我不认为它正在运行“非GUI”实例,它只是隐藏了应用程序。您可以将“激活”行添加到applescript中以使应用程序变为活动状态,在这种情况下,您将看到窗口和菜单。