4 votos

Applescript - activar la aplicación en segundo plano no funciona

¿Por qué no funciona esto?

tell application "System Events"
    set AppName to name of every process whose background only is false
    tell application (some item of AppName)
        activate
    end tell
end tell

mientras que este

funciona

global AppName
tell application "System Events"
    set AppName to name of every process whose background only is false
end tell

tell application (some item of AppName)
    activate
end tell

Obviamente, tiene algo que ver con el alcance, pero no entiendo por qué o qué.

2 votos

No se trata del ámbito, no, se trata de hacia dónde se dirigen los comandos y qué aplicación o script está manejando su ejecución. Has anidado una tell application dentro del otro en su primer script. Hay muchas buenas razones para hacer esto en una situación determinada, pero esta no es una de ellas ya que Eventos del sistema no puede realmente emitir comandos a otras aplicaciones, y activate se dirige de forma ambigua potencialmente a ambos Eventos del sistema y alguna otra aplicación, por lo que probablemente acabe activando Eventos del sistema preferentemente. La separación de los dos tell bloques en su segundo es lo que funciona.

2 votos

El global AppName es redundante.

5voto

wch1zpink Puntos 11

Creo que el problema es.. Decirle a una aplicación que se active, es manejado por "Standard Additions", pero usted está pidiendo a "System Events" que maneje esa acción.

tell application "System Events" to set AppName to name of ¬
    every process whose background only is false
tell application (some item of AppName) to activate

0 votos

No necesitas my . tell application (some item of AppName) to activate es suficiente.

0 votos

Sí, tiene razón. Sin embargo, creo que si se establece la variable dentro de un bloque tell de la aplicación, al referirse a esa variable en un bloque tell de una aplicación diferente, se hace necesario el uso de "mi" o "de ella". Creo que LOL

0 votos

Eso es en relación con las propiedades y los manejadores, no con las variables, ¿no es así?

4voto

Oskar Puntos 1242

Déjame contarte una historia:

Un padre se levantó y llamó a tres niños:

  • Ace - despierta y ve a traerme una Apple
  • Deuce - despierta y ve a traerme una Apple
  • Trey - despierta y tráeme una Apple

Ese padre estaba feliz de tener tres manzanas y todos fuera de la cama.

El otro padre dijo:

  • Trey - despierta y ve a traerme una Apple (o creen que se lo pidieron a Trey - no están seguros de haber sido específicos sobre qué o quién se lo pidió)

¿Coincide esto con lo que "no funciona" para ti?

Si es así, es impresionante. Si no es así, querrás pasar por cada script en el Editor script y ver dónde van tus programas "fuera de script". También te animo a que eches un vistazo a https://latenightsw.com Depurador de scripts: ejecuta algunas funciones básicas de forma gratuita, pero si valora más su tiempo que el de recorrer los en el editor más básico de Apple, puede valer la pena pagar la versión completa.

Además, un libro sobre iteración o bucles podría ser un buen lugar para ir si todo no estaba claro. No te sientas mal, este es un gran lugar para tropezar y aprender - una vez que tengas los bucles, serás capaz de hacer cosas increíbles en cualquier lenguaje de scripting - no sólo en AppleScript.

1 votos

Realmente espero que hayas ganado tu reputación de 145k con respuestas exactamente como esta. Esto es brillante. Ojalá todas las respuestas de StackExchange fueran parábolas abstractas.

0 votos

Ouch - creo ;)

2 votos

No, realmente me encanta esta respuesta. No necesariamente quiero +1, pero definitivamente quiero ❤.

1voto

curtified Puntos 21

Intentaba pulsar el botón "OK" en Kontakt en segundo plano mientras trabajaba. Esto solucionó mi problema:

tell application "System Events"
    if exists of application process "Kontakt 5" then
        tell application "Kontakt 5.6.0" to activate
        delay 0.5
        repeat
            try
                click UI element "OK" of window 1 of application process "Kontakt 5"
            end try
        end repeat
    end if
end tell

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X