AppleScript: Quitter plusieurs applications en un seul click !
Par Didier Pulicani - Publié le
Quelques mots...
Vous pouvez bien sur les quitter une à une et déconnecter, le tout à la main. Mais vous pouvez aussi utiliser le script que je vais présenter et qui quitte toutes les applications définies et déconnecte (je publierais bientôt un autre article sur un script quittant toutes les applications et pas seulement celles définies)
Ce script peut aussi servir au cas où votre père (c' est mon cas...), votre grand-mère ou votre petite-soeur ont du mal à intégrer les manipulations (pourtant basiques !) de déconnexion ou pensent que fermer toutes les fenetres d' une application revient à la quitter...Avec ce script, ils appuient sur une touche et tout est automatique (grace au TdB "Frappe Clavier" et aux touches de fonctions paramétrables).
Cet article s' adresse avant tout aux débutants mais les utilisateurs chevronnés pourront passer les explications sur les structures de base.
Le Script en lui-même...
Ce script se sert de deux compléments de pilotages : "Sändi's Additions" et "Is application running" qui fait partie de "GTQ Programming Suite".Vous les trouverez tous les deux sur www.osaxen.com
Tout d' abord, définissons en property la liste des applications à quitter:
property apps_a_quitter : {}
Mettez entre les crochets et entre guillemets les applications que le script devra quitter (séparées par une virgule)
Par exemple:
property apps_a_quitter : {"Internet Explorer", "Outlook Express"}
Le choix du handler n' est pas compliqué; on veut que le script s' éxécute quand on lance l' application, le handler sera donc :
on run
Note: si vous ne mettez pas de handler, le "on run" sera utilisé par défaut.
N' oubliez pas de terminer votre script par "end run".Vous pouvez le mettre tout de suite et vous taperez le script entre ces deux lignes.
Ensuite nous voulons que le script quitte les applications définies et déconnecte.Seulement il peut arriver que vous vouliez garder vos applications ouvertes et déconnecter (pour lire vos messages par exemple) ou l' inverse.
Nous allons donc définir deux variables booléennes (c-a-d soit "true" soit "false") en fonctions des touches pressées au lancement du script:
set KeepApps to (CommandIsDown)
set KeepConnect to (OptionIsDown)
KeepApps et KeepConnect sont les noms des deux variables et les commandes entre parenthèses proviennent de "Sändi's Additions".Voyons leur dictionnaire:
Donc si la touche commande est pressée au lancement du script, KeppApps sera true.
De même pour KeepConnect avec la touche Option.
Si vous ne touchez à rien les deux variables seront "false" (c-a-d qu' on ne gardera ni les applications ni la connexion)
La suite du script se compose de deux parties se déclenchant chacune à une condition.
Nous allons donc utiliser "if":
if KeepApps is false and apps_a_quitter != {} then
--la partie seravnt à quitter les applications sera ici
end if
Dans le script final, le commentaire sera remplaçé par des commandes.Elles ne se déclencheront que si KeepApps est false (ce qui sera toujours le cas sauf si vous appuyez sur la touche Commande) ET si la variable apps_a_quitter n' est pas vide, c-a-d si vous avez défini des applications à quitter.
Pour que les applications quittent, il sufit de le leur dire tour à tour.Nous allons utiliser pour cela la boucle "repeat":
repeat with i from 1 to (count apps_a_quitter)
set |app| to item i of apps_a_quitter
if (is application running |app|) is true then
tell application |app|
quit
end tell
end if
end repeat
Cette boucle repeat est munie d' un compteur ("i") qui est tout simplement un nombre.A la première éxécution de la boucle, i est égal au nombre après "from" (ici 1) et à chaque passage, il augmente de 1 par défaut (vous pouvez changer ce nombre en spécifiant à la fin de la ligne "by x" où x est un entier) jusqu' à la valeur définie après le "to".Cependant, il est rare que l' on mette un entier après le "to".Généralement (et c' est le cas de notre script), on doit effectuer des opérations sur tous les éléments d' une liste et donc aller du premier au dernier élément de la liste.En mettant (count apps_a_quitter), on est sur d' aller jusqu' au dernier élément de la liste car "count maliste" renvoie le nombre d' éléments contenus dans maliste.La boucle s' arrête quand "i" a atteint la valeur en "to".
Nous définissons ensuite une variable appelée "app" ayant pour valeur l' élément i de la liste.
Seulement, nous devons encadrer son nom de pipe-lines ("|", option-maj-l) car pour AppleScript, app est l' abréviation d' "application" qui a un sens particulier et ne peut être défini comme variable.
Les pipe-lines servent donc à enlever son sens spécifique à un nom de variable.
Bien sur, il ne faut quitter l' application que si elle est déjà lançée !
C' est le rôle de la commande "is application running".Voici son dictionnaire:
Le résultat de cette commande est une booléenne qui, dans notre cas, devra être "true" pour que les commandes à l' intérieur du "if" s' éxécutent et que l' application quitte.
Ensuite, il suffit de déconnecter (seulement si on a pas appuyé sur Option):
if KeepConnect is false then
set EtatRA to (state of (RA status))
if EtatRA is not "inactif" then
RA disconnect
end if
end if
On définit une variable EtatRA qui contient l' état de la connexion obtenu grâce à une commande de "Commandes Remote Access" dont voici le dictionnaire:
La commande RA status retourne une liste d' éléments où chaque élément est précédé d' une étiquette qui indique à quoi il correspond. Cette sorte de liste s' appelle un "record". Pour obtenir l' élément de ce record qui nous intéresse (dans notre cas, le "state"), il suffit de spécifier son étiquette, ce qui nous donne state of (RA status)
Si EtatRA est différent de "inactif", on se sert de la commande RA disconnect (dont vous trouverez la description dans le dictionnaire de "Commandes Remote Access") qui ,comme son nom l' indique, déconnecte tout simplement.
Le script complet
property apps_a_quitter : {}
on run
set KeepApps to (CommandIsDown)
set KeepConnect to (OptionIsDown)
if KeepApps is false and apps_a_quitter != {} then
repeat with i from 1 to (count apps_a_quitter)
set app1 to item i of apps_a_quitter
if (is application running app1) is true then
tell application app1
quit
end tell
end if
end repeat
end if
if KeepConnect is false then
set EtatRA to (state of (RA status))
if EtatRA is not "inactif" then
RA disconnect
end if
end if
end run
Et voilà ! Si vous avez des problèmes, que le script ne marche pas ou que vous ne comprenez pas quelquechose, surtout n' hésitez pas, mailez moi ! Même si ça n' a rien a voir avec l' article, je me ferais un plaisir de répondre à vos questions ou de recevoir vos suggestions, commentaires...
Article entièrement rédigé par Coco