7 votes

Applescript - attendre l'apparition/disparition d'une fenêtre/dialogue

Je suis en train d'écrire un script pour iTunes et j'ai rencontré deux problèmes lorsque, dans une étape de mon script, je dois vérifier si les fenêtres/dialogues sont affichés ou non.

  1. Selon le Attendre qu'une fenêtre existe dans Applescript ? Ceci devrait être un code valide

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

mais lorsque je le compile, j'obtiens le message d'erreur suivant : "Expected end of line but found """ (Fin de ligne attendue mais trouvée) (" fait référence au " qui précède le E dans Evernote). Pourquoi ? Cette question date d'il y a 2,5 ans, est-ce que quelque chose a changé depuis ? J'utilise OS X 10.11.

  1. Je peux utiliser ce code pour vérifier si la fenêtre d'information sur la chanson est ouverte dans iTunes.

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

mais lorsque j'essaie de rechercher une boîte de dialogue Ouvrir avec une ligne similaire

repeat until (exists window "Open")

la fenêtre n'est pas détectée. J'ai utilisé l'inspecteur d'accessibilité pour obtenir certaines propriétés de la fenêtre Song Info et de la boîte de dialogue Open et les seules différences que j'ai remarquées sont le nom et le type. Song Info est une "fenêtre" tandis que Open est une "boîte de dialogue". J'ai donc également essayé ces deux variantes du code précédent :

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

mais aucun d'entre eux ne compile.

Comment détecter la boîte de dialogue Ouvrir ?

8voto

user3439894 Points 52496

La raison pour laquelle vous obtenez " Erreur de syntaxe La fin de ligne était attendue, mais on a trouvé """." lors de l'utilisation de repeat until window "Print" of process "Evernote" exists c'est parce que vous l'utilisez hors du contexte de l'application appelante. Vous pourriez dire que, dans le contexte de l'application appelante, elle ne comprend pas la commande et que l'éditeur AppleScript n'est pas très bien écrit pour exprimer ce que l'erreur signifie réellement.

Quoi qu'il en soit, l'exemple code ci-dessous, lorsqu'il est exécuté dans ScriptEditor, attendra de lui-même l'affichage du message "Your wait is over !". boîte de dialogue jusqu'à iTunes est ouvert et que vous appuyez sur O ou cliquez sur Fichier > Ajouter à la bibliothèque sur le iTunes menu .

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
  • Notez l'utilisation du delay commande au sein de la repeat boucle . Il est évident que le valeur peut être réglé sur autre chose, même fractions de seconde Cependant, vous devriez toujours utiliser un délai afin d'éviter Événements du système d'éviter de déclencher inutilement le boucle des centaines de fois par seconde jusqu'à ce que le condition est rencontrée.

En règle générale, j'ai constaté qu'à chaque fois que j'utilise des code qui a ... process ... ou ... application process ... c'est un appel en cours de réalisation a ou par Événements du système et donc, dans ce cas d'utilisation, le repeat boucle doit se situer à l'intérieur d'un tell déclaration ou bloc de Événements du système afin de ne pas obtenir le erreur mentionné dans votre OP.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X