AppleScript отримати активну програму


13

Як я можу запустити код (наприклад display dialog("test")) за допомогою AppleScript, лише якщо додаток "Finder" зараз знаходиться у фокусі / активному режимі.


Гм, якщо програма вже активна, що ви прагнете досягти, активуючи її знову?
Кент

stackoverflow.com/questions/3718520/… простою є актуальною, хоча це не вирішує проблему.
Вільям

Вам потрібно уточнити своє запитання. Сценарій у моїй відповіді працює, для заданого визначення поняття "працює", тобто він точно повідомляє, чи "Finder" передує.
Tetsujin

@Tetsujin оновлено
Вільям

Як ви збираєтеся запускати додаток Applescript? Подвійне клацання на ньому, звичайно, завжди показуватиме Finder як "другий за останній" передній край. Зміна відповіді - це спрацює, якщо його зателефонують із редактора сценаріїв, але "не вдасться", якщо двічі клацнути в 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

завершити перезапис, тепер я знову на своєму робочому столі - це зараз робить саме те, що ви просили.
Tetsujin

2
ви також можете замінити другу діалогову команду, display dialog (activeApp)щоб підтвердити саме те, що сценарій вважає переднім.
Кент

1
Будьте уважні з цим - назви деяких програм (наприклад, tell application "app_name") відрізняються від назв процесів (наприклад, set frontmost of process "app_process" to true).
BallpointBen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.