Comment Afficher un message pendant l'exécution d'un Applescript ? |
Bienvenue invité ( Connexion | Inscription )
Comment Afficher un message pendant l'exécution d'un Applescript ? |
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. |
|
|
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)
|
|
|
Guest_JacqR_* |
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 |
|
|
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. |
|
|
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. |
|
|
Nous sommes le : 25th April 2024 - 06:55 |