IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Comment Afficher un message pendant l'exécution d'un Applescript ?
Options
gyomg
posté 3 Oct 2014, 12:57
Message #1


Adepte de Macbidouille
*

Groupe : Membres
Messages : 62
Inscrit : 23 Jun 2005
Membre no 41 373



Comment Afficher un message pendant l'exécution d'un Applescript ?

J'ai un script AppleScript (compilé) un peu long à l'exécution, et je souhaite afficher un message pendant l'exécution (donc sans bloquer l'exécution...) jusqu'à la fin du script.
Est-ce possible, et comment ?

Merci.

(OS X.8 ou +)

NB : J'ai cherché et n'ai point trouvé...


--------------------
Mac mini i7 4coeur OS X.11 ; 16Go
Mac mini Core 2 Duo OS X.11 et X.6 ; 4Go
MacBook Air i5 2013 OS X.11
VM Fusion avec divers systèmes...
Sheepshaver sous OS 9.0.4
etc.
Go to the top of the page
 
+Quote Post
benja
posté 3 Oct 2014, 13:25
Message #2


Thalès du pavé
*****

Groupe : Membres
Messages : 2 520
Inscrit : 30 Jul 2004
Membre no 21 573



Tu peux utiliser la commande "log" qui fera apparaitre un message dans l'onglet "événements" de l'éditeur de scripts.

Tu ne pourras pas afficher une boite de dialogue (display dialog) sans bloquer l'exécution du script.

Ce message a été modifié par benja - 3 Oct 2014, 13:33.


--------------------
Ryzen 3600 / GTX1080Ti / 32GB / Win 10 (Le nouveau mac pro quoi)
Go to the top of the page
 
+Quote Post
Guest_JacqR_*
posté 4 Oct 2014, 18:02
Message #3





Guests






Bonjour,

Pour Mavericks (OS 10.9.x) vous pouvez utiliser ce script:
Code
-- pour afficher le message -- le premier paramètre est le titre, le deuxième est le texte du message -- \\\"
set {myPID, pid} to my afficheMessage("Mon AppleScript", "Ce proccessus prendra quelques minutes." & return & "Veuillez patienter.")

delay 5 -- remplacer cette ligne par votre script

-- pour fermer le message, la commande 'ps' vérifie que le processus 'pid' est celui lancé par ce script, sinon le message a été fermer par l'utilisateur.
do shell script "p=" & pid & "; r=$(ps  -o pgid -p $p | tail -1); if [ $r -eq " & myPID & " ]; then /bin/kill $p; fi; > /dev/null 2>&1 &"

on afficheMessage(t, m)
    set x to "display dialog \"" & m & "\" with title \"" & t & "\" buttons {\"OK\"}"
    do shell script "echo \" $PPID\"; osascript -e " & (quoted form of x) & " > /dev/null 2>&1 & echo $!"
    return words of the result -- le premier mot est le process ID de ce script, le deuxième mot est le process ID de la commande osascript
end afficheMessage



Pour (OS 10.8.x ou moins récent):
La commande osascript ne fonctionne pas avec les dialogues, sauf si on les utilise dans un bloc 'tell application ...', les inconvénients : cela bloque l'application choisi et on ne peux pas fermer le dialogue par le script sauf quitter l'application (ce n'est pas recommander de quitter l'application inutilement).
Solution : faire une application (en AppleScript) bidon pour afficher le message.
le script serait comme ceci:
Code
-- pour afficher le message, l'application "Bidonxxxxx" affiche son dialogue
ignoring application responses
    run application "Bidonxxxxx"
end ignoring

delay 6 -- remplacer cette ligne par votre script

-- pour quitter l'application "Bidonxxxxx", les commande 'ps' et 'sed' récupere le process ID de l'application "Bidonxxxxx"
do shell script "p=$(ps -ax | sed -n '/[/]Bidonxxxxx.app[/]Contents/s:^ \\([0-9]*\\).*:\\1:p'); if [ ! -z \"$p\" ]; then /bin/kill $p; fi; > /dev/null 2>&1 &"


Autre solution : utiliser ce script (fonctionne aussi sur OS 10.9), c'est Python qui affiche le message:
Code
-- pour afficher le message -- le premier paramètre est le titre, le deuxième est le texte du message
set {myPID, pid} to my afficheMessage("Mon AppleScript", "Ce proccessus prendra quelques minutes." & return & "Veuillez patienter.")

delay 5 -- remplacer cette ligne par votre script

-- pour fermer le message, la commande 'ps' vérifie que le processus 'pid' est celui lancé par ce script, sinon le message a été fermer par l'utilisateur
do shell script "p=" & pid & "; r=$(ps  -o pgid -p $p | tail -1); if [ $r -eq " & myPID & " ]; then /bin/kill $p; fi; > /dev/null 2>&1 &"

on afficheMessage(t, m)
    set pyScript to quoted form of "import sys; from Tkinter import Tk, Label; f=Tk(); f.title(sys.argv[1]); t=Label(f, text=sys.argv[2], padx=7, pady=7); x=(f.winfo_screenwidth()/2) - (t.winfo_reqwidth()/2); y=(f.winfo_screenheight()/4);f.geometry(\"+%d+%d\" % (x, y)); f.lift(); f.call('wm', 'attributes', '.', '-topmost', '1'); f.after_idle(f.call, 'wm', 'attributes', '.', '-topmost', '0'); t.pack(); f.mainloop()"
    do shell script "echo \" $PPID\"; /usr/bin/python -c " & pyScript & " " & (quoted form of t) & " " & (quoted form of m) & "> /dev/null 2>&1 & echo $!" -- ouvre une instance de l'application "Python"
    return words of the result -- le premier mot est le process ID de ce script, le deuxième mot est le process ID de la commande python
end afficheMessage
Go to the top of the page
 
+Quote Post
gyomg
posté 8 Oct 2014, 03:30
Message #4


Adepte de Macbidouille
*

Groupe : Membres
Messages : 62
Inscrit : 23 Jun 2005
Membre no 41 373



Merci beaucoup

NB : mais je trouve hallucinant qu'une telle fonction de base ne soit pas implémentée dans AppleScript ???


--------------------
Mac mini i7 4coeur OS X.11 ; 16Go
Mac mini Core 2 Duo OS X.11 et X.6 ; 4Go
MacBook Air i5 2013 OS X.11
VM Fusion avec divers systèmes...
Sheepshaver sous OS 9.0.4
etc.
Go to the top of the page
 
+Quote Post
Jaypee
posté 8 Oct 2014, 07:09
Message #5


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 486
Inscrit : 29 Aug 2002
Membre no 3 340



Ce que tu recherches à faire s'appelle un dialogue non-modal (non bloquant)
Or AppleScript ne supporte qu'un dialogue modal, avec des boutons.

J'ai lu une suggestion qui demande un peu plus d'effort mais qui peut remplir cette tâche:
- Utiliser Xcode et InterfaceBuilder
- Personnaliser un menu: Ajouter un menu "statut", et je ne sais pas si c'est possible, le label du menu pourrait être changé par le code et servir d'affichage non-modal ?

Edit: En fait, dès que l'on choisit Xcode (qui remplace AppleScript Studio) pour créer une Appli OS X de type AppleScript, on a franchit les portes d'un nouveau monde où tout est permis, comme une appli avec une vraie fenêtre, un vrai menu etc...

J-P

Ce message a été modifié par Jaypee - 8 Oct 2014, 16:30.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 25th April 2024 - 06:55