Как запустить код (например display dialog("test")) с помощью AppleScript, только если приложение «Finder» в данный момент находится в фокусе / активно.
Вам нужно уточнить свой вопрос. Сценарий в моем ответе работает для данного определения «работ», т.е. он точно сообщает, является ли Finder лучшим.
Тецудзин
@Tetsujin обновлено
Уильям
Как вы собираетесь запускать приложение Applescript? Двойной щелчок по нему, конечно, всегда покажет Finder как «2-й до последнего». Изменение ответа - это будет работать, если вызывается из редактора сценариев, но «не работает», если дважды щелкнуть в Finder, поскольку это дает ложноположительный результат
Tetsujin
Ответы:
18
Это будет работать, если скрипт вызывается из редактора скриптов, так как он «уходит с дороги», чтобы проверить следующее приложение в строке, но потерпит неудачу, если дважды щелкнуть из Finder, так как Finder всегда будет последним в строке.
tell application "System Events"
set frontmostProcess to first process where it is frontmost
set visible of frontmostProcess to false
repeat while (frontmostProcess is frontmost)
delay 0.2
end repeat
set secondFrontmost to name of first process where it is frontmost
set frontmost of frontmostProcess to true
end tell
tell application (path to frontmost application as text)
if "Finder" is in secondFrontmost then
display dialog ("Finder was last in front")
else
display dialog (secondFrontmost & " was last in front")
end if
end tell
Оставляя предыдущий ответ здесь для потомков
Перефразировал весь ответ после того, как сначала не прочитал вопрос должным образом ;-)
tell application "System Events"
set activeApp to name of first application process whose frontmost is true
if "Finder" is in activeApp then
display dialog ("test")
else
display dialog ("test2")
end if
end tell
+1 Хотя предложенное вами решение, похоже, не работает как есть. Я получаю «тест», пока приложение открыто и не обязательно, активно оно или нет.
Уильям
переосмысление… отредактированный ответ
Tetsujin
полное переписывание, теперь я вернулся за рабочий стол - теперь это именно то, что вы просили.
Тетсуджин
2
Вы также можете заменить вторую команду диалога, display dialog (activeApp)чтобы точно подтвердить, что сценарий считает самым передним.
Кент,
1
Будьте осторожны с этим - имена приложений некоторых приложений (например, tell application "app_name") отличаются от имен их процессов (например, set frontmost of process "app_process" to true).
Ответы:
Это будет работать, если скрипт вызывается из редактора скриптов, так как он «уходит с дороги», чтобы проверить следующее приложение в строке, но потерпит неудачу, если дважды щелкнуть из Finder, так как Finder всегда будет последним в строке.
Оставляя предыдущий ответ здесь для потомков
Перефразировал весь ответ после того, как сначала не прочитал вопрос должным образом ;-)
источник
display dialog (activeApp)
чтобы точно подтвердить, что сценарий считает самым передним.tell application "app_name"
) отличаются от имен их процессов (например,set frontmost of process "app_process" to true
).