假设我有两个应用程序正在运行;应用程序A和应用程序B.当应用程序A关闭时,让应用程序B自动关闭的最简单方法(或者确实存在)是什么?请注意,这些应用程序都不是我开发的,因此我无法控制其内部行为。
我愿意接受任何建议,包括那些需要使用Applescript,Automator,终端命令和BASH脚本的建议。我甚至会考虑开发一个轻量级的Mac OS X应用程序来实现这一目标。
答案 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应用程序无法直接从脚本编辑器运行,因此调试时可能会有点麻烦,因为没有要查看的事件日志 - 您需要添加自己的对话框或其他内容。