osx: запустить программу при открытии другой программы

1086
metasequoia

Я хотел бы метод запуска программы, когда другая программа запускается. В частности, я хотел бы открыть документ MS Word и одновременно открыть мой менеджер цитирования (EndNote поддерживает эту функцию в настройках MS Word, но я недавно переключил менеджеры цитирования).

Я хотел бы иметь возможность открыть любой существующий документ Word на моем диске и запустить вторую программу. На этот же вопрос недавно был дан ответ для среды Windows 7.

1
Это отличный вопрос, я также хотел бы знать, как закрыть одну программу при закрытии другой. Можно ли это сделать так же? Mike Kormendy 10 лет назад 0

2 ответа на вопрос

2
user495470

Попробуйте сохранить список свойств как этот ~/Libary/LaunchAgents/test.plistи загрузить его с помощью launchctl load ~/Libary/LaunchAgents/test.plist.

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd> <plist version="1.0"> <dict> <key>Label</key> <string>test</string> <key>ProgramArguments</key> <array> <string>osascript</string> <string>-e</string> <string>tell application "System Events" set p to name of processes if p contains "TextEdit" and p does not contain "Mail" do shell script "open -gja Mail" end end</string> </array> <key>StartInterval</key> <integer>10</integer> </dict> </plist> 

open -j( --hide) был добавлен в 10.8. open -jgиногда открывает новое видимое окно, если приложение работает, но не имеет открытых окон.

Если StartInterval равен 9 секундам или меньше, программа просто блокируется.

com.apple.launchd.peruser.501[128]: (test) Throttling respawn: Will start in 7 seconds 
Можем ли мы закрыть одно приложение, когда другое закрывается тем же методом? Mike Kormendy 10 лет назад 0
0
Juan Arroyodorado

Спасибо за код. Мне удалось немного его расширить, чтобы также закрыть запущенный процесс, если исходный наблюдаемый процесс больше не работает. Вот мой код:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd> <plist version="1.0"> <dict> <key>Label</key> <string>TextEditWatcher</string> <key>ProgramArguments</key> <array> <string>osascript</string> <string>-e</string> <string>tell application "System Events" set p to name of processes if p contains "TextEdit" and p does not contain "Mail" then do shell script "open -gja Mail" end if if p does not contain "TextEdit" and p contains "Mail" then tell application "Mail" to quit end if end tell</string> </array> <key>StartInterval</key> <integer>30</integer> </dict> </plist> 

В моей Системе (10.9.4) StartInterval, равный 10, был уже слишком большим, и, поскольку в моем случае время не имеет решающего значения, я выбрал 30 секунд. Но 15 или 20 тоже должно быть хорошо. Установка и тестирование, как указано в ответе Лри.

Похожие вопросы