App B关闭时关闭App A:Mac OS X 10.7.3

时间:2012-02-25 14:02:19

标签: macos terminal applescript

假设我有两个应用程序正在运行;应用程序A和应用程序B.当应用程序A关闭时,让应用程序B自动关闭的最简单方法(或者确实存在)是什么?请注意,这些应用程序都不是我开发的,因此我无法控制其内部行为。

我愿意接受任何建议,包括那些需要使用Applescript,Automator,终端命令和BASH脚本的建议。我甚至会考虑开发一个轻量级的Mac OS X应用程序来实现这一目标。

3 个答案:

答案 0 :(得分:5)

如果您不需要B立即退出 - 如果可以等待几秒钟 - 那么您可以安排定期后台任务(使用cron甚至只是iCal)执行以下操作:

if not exists (processes where name is A)
   tell application B to quit
end if

如果您想立即响应,另一个选项是将App A包装在启动它的脚本中,等待它终止,然后终止B(osascript -e "tell application B to quit")。然后你可以随时使用该脚本来启动A。

您甚至可以将脚本插入应用程序包中,以便双击运行您的脚本。你可以通过在应用程序上执行“show package contents”来替换&lt; CFBundleExecutable&gt;在<app>\Contents\info.plist中使用您的脚本名称,并将该脚本放入<app>\Contents\MacOS。然后让脚本运行已经存在的可执行文件。

答案 1 :(得分:4)

很棒的问题。我花了大约10分钟寻找一个旧项目,我已经注册了应用程序退出但无法轻松找到我的代码的通知。但我确实找到了一个潜在的选择。

如果您下载Apple的AppList sample code project,您会看到它正在观察NSRunningApplications列表,当应用退出时,它会从窗口中正在运行的应用列表中删除该应用。您可以采用他们在那里使用的技术,当您检测到“应用程序A”退出时,您可以将“退出”Apple事件发送到“应用程序B”。

答案 2 :(得分:3)

由于您正在运行Lion,因此您可以使用Cocoa-AppleScript访问Cocoa方法以将您的应用程序添加为观察者,并在应用程序退出时收到通知。

例如,从 AppleScript编辑器&gt;创建一个新应用程序。文件&gt;模板新增&gt; Cocoa-AppleScript applet 。在运行处理程序中,将应用程序添加为观察者,以便在应用程序退出时收到通知:

    set theNotice to current application's NSWorkspaceDidTerminateApplicationNotification
    tell current application's NSWorkspace's sharedWorkspace's notificationCenter
        addObserver_selector_name_object_(me, "appQuitNotification:", theNotice, missing value)
    end tell

接下来,添加 appQuitNotification 处理程序(这是上面 addObserver_selector_name_object _ 中指定的处理程序选择器),类似于:

on appQuitNotification_(aNotification) -- an application quit
    -- aNotification's userInfo record contains an NSRunningApplication instance that we can get properties from
    set theApplication to (aNotification's userInfo's NSWorkspaceApplicationKey's localizedName()) as text
    say "application " & theApplication & " quit" -- for testing
    if theApplication is "this" then tell application "that" to quit -- or whatever
end appQuitNotification_

......你已经完成了。只要您的应用程序正在运行,它就会在应用程序退出时从系统获得通知。请注意,这些Cocoa-AppleScript应用程序无法直接从脚本编辑器运行,因此调试时可能会有点麻烦,因为没有要查看的事件日志 - 您需要添加自己的对话框或其他内容。