如何使用AppleScript编写应用程序脚本,但仅在安装时使用?

如何使用AppleScript编写应用程序脚本,但仅在安装时使用?,applescript,Applescript,我的一些脚本使用Growl进行通知,但我现在尝试在没有安装Growl的机器上运行它们 这条线 tell application "Growl" notify with name "Script" title "Script" description NotifyText application name "Script" with sticky -- _ end tell 在带下划线的字符处给出此编译器错误: 应为“给定”、“进入”、“有”、“无”、

我的一些脚本使用Growl进行通知,但我现在尝试在没有安装Growl的机器上运行它们

这条线

tell application "Growl"
    notify with name "Script" title "Script" description NotifyText application name "Script" with sticky
--                   _
end tell
在带下划线的字符处给出此编译器错误:

应为“给定”、“进入”、“有”、“无”、其他参数名称等,但找到了“”


AppleScript如何选择性地使用应用程序?

据我所知,脚本编辑器没有条件编译指令,如果未安装应用程序,则会在编译时出错。在某些情况下,脚本编辑器可以通过以e缺少应用程序,但这限制了应用程序和成功,并且实际上取决于为缺少的应用程序编写的代码

至于编写代码以有条件地使用目标应用程序(如果已安装),则需要测试其存在性,并将目标应用程序代码包装在
if
语句块中。在下面的示例AppleScript代码中,我想在V中播放的Movies文件夹中有一个测试视频文件LC如果已安装,如果未安装,则在QuickTime Player中播放,例如:

set thisVideo to (path to movies folder as string) & "test.mp4"

try
    tell application "Finder" to get application file id "org.videolan.vlc"
    set appExists to true
on error
    set appExists to false
end try

if appExists then
    set theApp to "VLC"
    tell application theApp to open thisVideo
else
    tell application "QuickTime Player"
        open thisVideo
        play document 1
    end tell
end if
现在我没有安装Growl,但是上面显示的示例AppleScript代码也应该适用于它。从安装了它的Mac电脑上,您只需要在目标应用程序运行时确定它的
bundle identifier
属性,并使用它代替示例代码中的内容,即:



注意:示例AppleScript代码就是这样,没有使用任何其他错误处理,只是为了显示完成任务的多种方法中的一种。用户有责任根据需要/需要添加/使用适当的错误处理。

需要注意的一点是防止抛出错误如果(例如)未安装VLC,脚本编辑器将打开一个对话框,以便显示VLC的应用程序文件的位置。它在尝试编译脚本时以及在执行过程中都会这样做。也许有一种方法可以避免这种情况。@CJK,最初测试时,选择“是”对话框框确实出现了,但是单击“取消”按钮可以编译和/或运行
if
语句的
else
分支。也就是说,我已经更新了代码,所以“选择应用程序”对话框不会起作用。感谢您提出这一点!CJK,谢谢,但这可能还为时过早,因为它在示例使用中起作用在这种情况下,除非您首先在安装了Growl的系统上编译它并保存脚本,否则它不适用于Growl。实际上,它应该保存为应用程序,以便保持编译状态。我想我将不得不购买Growl并尝试一下。我将在本周末更新它。
tell application "System Events" to get bundle identifier of application process "Growl"