AppleScript aktywuje aplikację

13

Jak uruchomić kod (na przykład display dialog("test")) przy użyciu AppleScript tylko wtedy, gdy aplikacja „Finder” jest aktualnie aktywna / aktywna.

William
źródło
Jeśli aplikacja jest już aktywna, co zamierzasz osiągnąć, aktywując ją ponownie?
Kent
stackoverflow.com/questions/3718520/... Bezczynność jest istotna, ale nie rozwiązuje problemu.
William
Musisz wyjaśnić swoje pytanie. Skrypt w mojej odpowiedzi działa, dla danej definicji „dzieł”, tzn. Dokładnie informuje, czy Finder znajduje się na pierwszym planie.
Tetsujin
Aktualizacja @ Tetsujin
William
Jak zamierzasz uruchomić aplikację Applescript? Dwukrotne kliknięcie go oczywiście zawsze pokaże Finderowi jako „od drugiego do ostatniego” z przodu. Zmiana odpowiedzi - zadziała, jeśli zostanie wywołana z edytora skryptów, ale „nie powiedzie się”, jeśli klikniesz dwukrotnie w Finderze, ponieważ daje wynik fałszywie dodatni
Tetsujin

Odpowiedzi:

18

Będzie to działać, jeśli skrypt zostanie wywołany z edytora skryptów, ponieważ „zejdzie mu z drogi”, aby sprawdzić kolejną aplikację w linii, ale zakończy się niepowodzeniem, jeśli klikniesz dwukrotnie w Finderze, ponieważ Finder będzie zawsze na końcu w kolejce.

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

Pozostawiając poprzednią odpowiedź tutaj dla potomności

Znalazłem całą odpowiedź po tym, jak początkowo nie przeczytałem pytania ;-)

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
Tetsujin
źródło
+1 Chociaż proponowane rozwiązanie nie działa tak, jak jest. Dostaję „test”, o ile aplikacja jest otwarta i niekoniecznie, jeśli jest aktywna, czy nie.
William
przemyślenie… zredagowana odpowiedź
Tetsujin
kompletne przepisanie, teraz wracam do pulpitu - teraz robi dokładnie to, o co prosiłeś.
Tetsujin,
2
możesz również zastąpić drugie polecenie dialogowe, display dialog (activeApp)aby potwierdzić dokładnie to, co według skryptu jest najważniejsze.
Kent
1
Uważaj na to - nazwy aplikacji niektórych aplikacji (np. tell application "app_name") Różnią się od nazw procesów (np set frontmost of process "app_process" to true.).
BallpointBen