Закройте приложение A, когда закроется приложение B: Mac OS X 10.7.3 - PullRequest
4 голосов
/ 25 февраля 2012

Скажем, у меня запущено два приложения;Приложение A и приложение B. Каков был бы самый простой способ (или в любом случае есть), чтобы приложение B автоматически закрывалось при закрытии приложения A?Обратите внимание, что ни одно из рассматриваемых приложений не было разработано мной, и поэтому я не могу контролировать их внутреннее поведение.

Я открыт для любых предложений, включая те, которые влекут за собой использование команд Applescript, Automator, Terminal иBASH скриптинг.Я бы даже подумал о разработке легкого приложения для Mac OS X.

Ответы [ 3 ]

5 голосов
/ 25 февраля 2012

Если вам не нужен B для немедленного выхода - если нормально подождать несколько секунд - тогда вы можете запланировать периодическое фоновое задание (используя cron или даже просто iCal), которое выполняет что-то вроде этого:

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

Другой вариант, если вам нужен немедленный ответ, заключался бы в том, чтобы обернуть приложение A в скрипт, который запускает его, ожидает его завершения, а затем завершает работу B (osascript -e "tell application B to quit").Тогда вы всегда можете использовать этот скрипт для запуска A.

Вы можете даже вставить скрипт в комплект приложения, чтобы двойной щелчок запустил ваш скрипт.Это можно сделать, выполнив «показ содержимого пакета» в приложении, заменив в <app>\Contents\info.plist на имя вашего сценария и поместив этот сценарий в <app>\Contents\MacOS.Затем пусть скрипт просто запустит исполняемый файл, который уже там.

4 голосов
/ 25 февраля 2012

Фантастический вопрос.Я потратил около 10 минут на поиск старого проекта, в котором я зарегистрировался для уведомлений о выходе из приложений, но не смог легко найти свой код.Но я нашел для вас потенциальную альтернативу.

Если вы скачаете пример кода Apple *1003* AppList, вы увидите, что он наблюдает за списком NSRunningApplications и когда приложение закрывается, он удаляет это приложение из списка запущенных приложений в окне.Вы можете использовать технику, которую они там используют, и когда вы обнаружите, что ваше «приложение A» выходит, вы можете отправить «выход» Apple Event на «приложение B».

3 голосов
/ 25 февраля 2012

Поскольку вы работаете с Lion, вы можете использовать Cocoa-AppleScript для доступа к методам Cocoa, чтобы добавить свое приложение в качестве наблюдателя и получать уведомления при выходе из приложений.

Например, создайте новое приложение из Редактор AppleScript> Файл> Создать из шаблона> Апплет Cocoa-AppleScript .В обработчике запуска добавьте приложение в качестве наблюдателя, чтобы получать уведомления при выходе из приложения:

    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 не могут быть запущены непосредственно из редактора сценариев, поэтому их может быть немного сложно отлаживать, так как нет журнала событий, на который нужно смотреть - вам нужно будет добавить свои собственные диалоги или что-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...