1

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

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

2 ответа2

2

Попробуйте сохранить список свойств, такой как ~/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
0

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

<?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 тоже должно быть хорошо. Установка и тестирование, как указано в ответе Лри.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .