1

Je cette AppleScript:AppleScript - interaction avec une fenêtre de dialogue

tell application "Finder" to display dialog "derp" -- display a dialog 
tell application "System Events" to keystroke return -- dismiss that dialog by simulating the pressing of the "return" key 

et quand il est exécuté, je pensais que le dialogue serait rejeté en simulant la pression de la touche « retour » à l'aide keystroke return. Merci.

+0

et votre question est ..? – stib

Répondre

4

Votre script ne fonctionnera pas. Lorsque vous demandez à une application de faire quelque chose, l'applet attend que l'application le fasse avant que le reste du code ne soit exécuté. En tant que tel, le script attend que le Finder termine sa tâche avant de passer au code des événements système. Donc, dans votre script, la commande system events n'est pas exécutée avant que la boîte de dialogue ne soit fermée, ce qui signifie que vous ne pouvez jamais fermer une boîte de dialogue de cette façon.

Cependant, vous pouvez dire AppleScript ne pas attendre une réponse d'une application comme celui-ci ...

ignoring application responses 
    tell application "Finder" 
     activate 
     display dialog "blah" 
    end tell 
end ignoring 

delay 0.5 
tell application "System Events" to keystroke return 

Depuis AppleScript est un seul thread, une autre façon serait d'utiliser deux processus distincts. Un pour montrer le dialogue et un second pour fermer le dialogue. Vous pouvez le faire avec 2 applescripts différents, un pour chaque tâche. Une autre façon serait d'utiliser le shell pour créer un processus, puis vous envoyez ce processus à l'arrière-plan afin que l'applescript n'attend pas que le shell se termine, puis ferme la boîte de dialogue. Voici comment vous pourriez le faire de cette façon.

do shell script "osascript -e 'tell application \"Finder\"' -e 'activate' -e 'display dialog \"blah\"' -e 'end tell' > /dev/null 2>&1 &" 
delay 0.5 
tell application "System Events" to keystroke return 

Donc vous voyez qu'il y a plusieurs façons de le faire. Bonne chance.

3

La commande "dialogue d'affichage" inclut un paramètre giving up after [number] qui supprime automatiquement la boîte de dialogue après [nombre] secondes. Un exemple rapide:

tell application "Finder" to display dialog "Quick, press a button!" buttons{"1","2","3"} default button 1 giving up after 5 

Ce code produit une boîte de dialogue contenant trois boutons. Vous pouvez cliquer sur l'un d'eux tant que vous le faites dans le délai spécifié (dans ce cas, 5 secondes). Si vous ne parvenez pas à le faire, l'enregistrement « réponse de dialogue » renvoyée par la commande sera quelque chose comme ceci:

{button returned:"1", gave up:true} 

J'espère que cela aide! :)

Questions connexes