AppleScript consigue la aplicación activa

13

¿Cómo podría ejecutar código (por ejemplo display dialog("test")) usando AppleScript solo si la aplicación "Finder" está actualmente en foco / activa?

William
fuente
Um, si la aplicación ya está activa, ¿qué pretendes lograr activándola nuevamente?
Kent
stackoverflow.com/questions/3718520/… inactivo es relevante aunque no resuelve el problema.
William
Necesitas aclarar tu pregunta. El script en mi respuesta funciona, para una definición dada de 'funciona', es decir, informa con precisión si Finder es el primero o no.
Tetsujin
@Tetsujin actualizado
William
¿Cómo va a iniciar la aplicación Applescript? Hacer doble clic en él, por supuesto, siempre mostrará el Finder como el "segundo al último" en primer plano. Cambio de respuesta: esto funcionará si se llama desde el Editor de secuencias de comandos, pero 'falla' si se hace doble clic en Finder, ya que da un falso positivo
Tetsujin

Respuestas:

18

Esto funcionará si se llama a la secuencia de comandos desde el Editor de secuencias de comandos, ya que 'se sale del camino' para verificar la siguiente aplicación en línea, pero fallará si se hace doble clic desde Finder, ya que Finder siempre será el último en la línea.

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

Dejando la respuesta anterior aquí para la posteridad

Reajusté la respuesta completa después de no haber leído la pregunta correctamente inicialmente ;-)

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
fuente
+1 Aunque su solución propuesta no parece funcionar como es. Recibo "prueba" siempre que la aplicación esté abierta y no necesariamente si está activa o no.
William
un replanteamiento ... respuesta editada
Tetsujin
reescribir completamente, ahora estoy de vuelta en mi escritorio, esto ahora hace exactamente lo que me pediste.
Tetsujin
2
También puede reemplazar el segundo comando de diálogo con display dialog (activeApp)para confirmar exactamente lo que el script piensa que es el más importante.
Kent
1
Tenga cuidado con esto: los nombres de las aplicaciones de algunas aplicaciones (por ejemplo, tell application "app_name") difieren de los nombres de sus procesos (por ejemplo, set frontmost of process "app_process" to true).
BallpointBen