AppleScript erhält aktive Anwendung

Wie kann ich Code (z. B. display dialog("test")) mit AppleScript nur ausführen, wenn die Anwendung "Finder" derzeit im Fokus / aktiv ist.

Wenn die Anwendung bereits aktiv ist, was beabsichtigen Sie mit der erneuten Aktivierung?
stackoverflow.com/questions/3718520/… Leerlauf ist relevant, löst das Problem jedoch nicht.
Du musst deine Frage präzisieren. Das Skript in meiner Antwort funktioniert für eine bestimmte Definition von "funktioniert", dh es gibt genau an, ob der Finder im Vordergrund steht oder nicht.
@Tetsujin aktualisiert
Wie werden Sie die Applescript-App starten? Wenn Sie darauf doppelklicken, wird der Finder natürlich immer als „vorletzter“ vorderster angezeigt. Ändern der Antwort - Dies funktioniert, wenn es vom Skripteditor aus aufgerufen wird, schlägt jedoch fehl, wenn es im Finder doppelgeklickt wird, da es ein falsches Positiv ergibt
@Tetsujin Das ist das Problem, auf das ich stoße.
Darf ich fragen, warum Sie regelmäßig überprüfen müssen, ob der Finder vorne ist / war? Es scheint viel einfacher zu sein, einfach ein Applescript abzufeuern, um es nach vorne zu bringen und zu beenden … oder einfach darauf zu klicken.
@Tetsujin Ich hätte gerne ein Symbol im Dock, das beim Anklicken ein "PageDown" ausführt. key code (insert code here)funktioniert, aber Sie können nicht im Voraus wissen, welche Anwendung fokussiert wird.
@Tetsujin Sie haben sich genug Mühe gegeben. Ich bin davon überzeugt, dass das, wonach ich suche, in AppleScript möglich ist.
Sagen Sie der Anwendung "was auch immer" zu aktivieren \n Sagen Sie der Anwendung "Systemereignisse" den Schlüsselcode ... beenden Sie die Nachricht usw ... & geben Sie die Punkte für die Antwort ein.
@Tetsujin Das ist der Punkt, an dem ich nicht weiß, um welche Anwendung es sich handelt. Ich würde das PageDown-Symbol in jeder Anwendung verwenden.
dann müssen Sie nur noch der Anwendung secondFrontmost sagen ... Was auch immer es ist, wie mein Applescript im Hintergrund haben wird
@Tetsujin Es scheint keine Möglichkeit zu geben, die zweitvorderste Anwendung zu erhalten. Gleiches Problem hier stackoverflow.com/questions/25411174/…
Meine Antwort findet bereits das Zweitvorderste, weil sie selbst Vorne ist und sich dann versteckt. Es gibt keine programmatische Möglichkeit, die Startdienste abzufragen, um diese Informationen zu extrahieren. Das Beste, was Sie tun können, ist die Startreihenfolge. Wenn alles, was Sie brauchen, ein Drücken der Bild-ab-Taste ist, warum schauen Sie sich dann nicht die anderen unzähligen Möglichkeiten an, die erreicht werden können?

Antworten (1)

Dies funktioniert, wenn das Skript vom Skripteditor aus aufgerufen wird, da es "aus dem Weg geht", um die nächste App in der Reihe zu überprüfen, aber fehlschlägt, wenn es vom Finder aus doppelt angeklickt wird, da der Finder dann immer das letzte in der Reihe ist.

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

Lassen Sie die vorherige Antwort hier für die Nachwelt

Gesamte Antwort neu ausgerichtet, nachdem ich die Frage anfangs nicht richtig gelesen hatte ;-)

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 Obwohl Ihre vorgeschlagene Lösung nicht so zu funktionieren scheint, wie sie ist. Ich bekomme "test", solange die Anwendung geöffnet ist und nicht unbedingt, ob sie aktiv ist oder nicht.
ein Umdenken ... bearbeitete Antwort
komplett neu schreiben, jetzt bin ich wieder an meinem Desktop - das macht jetzt genau das, was Sie gefragt haben.
Hmm .. Wenn ich das Applescript als App zum Dock hinzufüge, wird nur "test2" angezeigt, egal auf welche Anwendung ich mich ursprünglich konzentriert habe.
wahrscheinlich, weil die Applescript-App im Vordergrund steht. Testen Sie, indem Sie eine Verzögerung von 3 Sekunden hinzufügen und dann zwischen Start und Trigger auf den Desktop klicken [so habe ich es hier getestet]
Sie können den zweiten Dialogbefehl auch durch ersetzen display dialog (activeApp), um genau zu bestätigen, was das Skript für den vordersten hält.
Seien Sie dabei vorsichtig – die App-Namen einiger Apps (z. B. tell application "app_name") unterscheiden sich von ihren Prozessnamen (z . B. set frontmost of process "app_process" to true).
Seien Sie auch vorsichtig, wenn Sie verschiedene Versionen derselben App installiert haben (z. B. Firefox)! Es kann (wahrscheinlich) das falsche starten.
Funktioniert noch 2019 auf Mojave