7

У меня есть яблочный скрипт, чтобы начать свою рабочую среду, но у меня есть небольшая болтовня. Я хочу, чтобы скрипт запускал несколько программ, а затем скрывал их после их запуска. Код выглядит следующим образом:

tell application "Firefox" to activate

delay 0.5

tell application "Finder"
  set visible of process "Firefox" to false
end tell

Очевидно, что задержка 0.5 - это просто заполнитель, в идеале я бы хотел скрыть программу, как только она закончила загрузку. К сожалению, мое время загрузки сильно варьируется (от 0,2 до 5 с). Есть ли что-то вроде обратного вызова или функция для мониторинга событий приложений?

2 ответа2

6

Запросите статус видимости в цикле, повторяя, чтобы установить его невидимым, пока он не заработает:

set appname to "Firefox"
tell application appname to launch
tell application "System Events"
    repeat until visible of process appname is false
        set visible of process appname to false
    end repeat
end tell

Отслеживая журнал событий редактора AppleScript, очевидно, что это может занять несколько попыток; следующее было повторено 1490 раз, когда я попробовал это с Xcode:

set visible of process "Xcode" to false
get visible of process "Xcode"
    --> true

До того, как это наконец заработало:

set visible of process "Xcode" to false
get visible of process "Xcode"
    --> false
2

Обычно вам не нужно добавлять какие-либо задержки, но в этом случае, даже если для свойства visibile установлено значение false, оно возвращается в значение true после завершения открытия приложения. Таким образом, вы не можете проверить его значение или если процесс существует.

Вы можете использовать launch или open -jg чтобы открыть приложение без видимых окон. launch открывает новое окно, если приложение не было открыто раньше. open -jg открывает новое окно, если приложение открыто, но не имеет видимых окон.

set b to "com.apple.TextEdit"
tell application "System Events"
    if bundle identifier of processes contains b then
        launch application id b
    else
        do shell script "open -jgb " & b
    end if
end tell

Некоторые приложения, такие как Alfred, Growl, nvALT, Unarchiver и X11, не работали ни с одним из них. Возможно, вам просто нужно добавить фиксированную задержку перед установкой visible в false.

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