Applescript - espere a que aparezca / desaparezca la ventana / diálogo

2

Estoy realizando una secuencia de comandos de iTunes y me he topado con dos problemas cuando en un paso de mi secuencia de comandos debo verificar si se muestran o no las ventanas / los cuadros de diálogo.

  1. De acuerdo con ¿Esperar hasta que exista una ventana en Applescript? este debería ser un código válido

    repeat until window "Print" of process "Evernote" exists

pero cuando lo compilo recibo este mensaje de error "Se esperaba final de línea pero se encontró" "(" se refiere a "antes de E en Evernote). ¿Por qué? Esa pregunta tiene 2,5 años, ¿ha cambiado algo desde entonces? Estoy ejecutando OS X 10.11.

  1. Puedo usar este código para verificar si la ventana de información de la canción está abierta en iTunes

    repeat until (not (exists window "Song Info"))

pero cuando intento buscar en un cuadro de diálogo Abrir con una línea similar

repeat until (exists window "Open")

no se detecta la ventana. He utilizado el Inspector de accesibilidad para obtener algunas propiedades de la ventana Información de la canción y el cuadro de diálogo Abrir, y las únicas diferencias que he notado son el nombre y el tipo. La información de la canción es una "ventana", mientras que Abrir es un "diálogo". Por lo tanto, también probé estas dos variaciones en el código anterior:

repeat until (exists dialog "Open")
repeat until (exists window dialog "Open")
repeat until (exists dialog window "Open")

pero ninguno de ellos compila.

¿Cómo detecto el cuadro de diálogo Abrir?

    
pregunta d-b 26.02.2017 - 13:53

1 respuesta

2

El motivo por el que se obtiene " Error de sintaxis Se esperaba el final de la línea pero se encontró" "" cuando se usa repeat until window "Print" of process "Evernote" exists porque se está usando fuera de contexto de la aplicación que realiza la llamada. Podría decir un significado, dentro del contexto de la aplicación que realiza la llamada, no comprende el comando y el Editor AppleScript no está tan bien escrito para expresar lo que realmente significa el error.

De todos modos, el ejemplo código a continuación, cuando se ejecuta en ScriptEditor, esperará por sí solo para mostrar el mensaje "¡Su espera ha terminado!" cuadro de diálogo hasta que iTunes esté abierto y presione O o haga clic en Archivo y gt ; Añadir a la biblioteca ... en el iTunes menú .

tell current application
    tell application "System Events"
        repeat until (exists window "Add To Library" of application process "iTunes")
            delay 1
        end repeat
    end tell
    activate
    display dialog "Your wait is over!"
end tell
  • Tenga en cuenta el uso del comando delay dentro del bucle repeat . Obviamente, el valor puede configurarse en otra cosa, incluso fracciones de segundo , sin embargo, siempre debe usar un retardo para evitar que Eventos del sistema sea innecesario activando el bucle cientos de veces por segundo hasta que se cumpla la condición .

Como regla general, he descubierto que cada vez que estoy usando código que tiene ... process ... o ... application process ... , se está haciendo call para o por Eventos del sistema y, como tal, en este caso de uso, el repeat loop debe estar dentro de un tell sentencia o bloque de Eventos del sistema para no obtener el error mencionado en su OP.

    
respondido por el user3439894 26.02.2017 - 17:57

Lea otras preguntas en las etiquetas