Top Promos Apple Test Apple Antivirus Mac Dock Thunderbolt Sunology Comparatif iPhone Nettoyeur Mac

Articles

Divers

Scripter le changement automatique de fond d'écran

Par Mac-4Ever - Mis à jour le

Apple Script : depuis le systeme 7.5 (si, si, rappelez-vous, sur les SE c'était jouable...) ce petit programme (1.1 Mo sous Mac OS X) stagne sur vos disques durs, et je suis sur qu'il vous est souvent arrivé de le supprimer, dans des moments de misère ou vous cherchiez les 4 octets manquants pour copier le dernier MP3 ou augmenter la mémoire virtuelle (et oui, on a pas tous 500 Go de disque dur...). Et comme tout fonctionnait aussi bien après, une question s'est peu a peu accroché a mon esprit : "Mais a quoi ça sert ?"

AppleScript est un language de programmation relativement simple de mise en oeuvre pour l'automatisation de taches relativement lourdes comme les discussions sur irc, (on peut réaliser un bot grâce a certaines applications scriptables, comme IRCLE), automatiser les fonctions du Finder (script de connection), etc... Mais bon, c'est assez abstrait tout ça, et vous ne vous sentez pas d'attaque a lire le manuel (deux tomes de 400 pages chacun, j'admets que c'est assez dissuasif)...

Heureusement, =MAC=4Ever, qui s'est pris la tête dessus pendant un petit mois, est là pour tout vous expliquer... Et va même vous apprendre à automatiser le changement de fond d'écran au démarrage (Note De Le Correcteur (c'est à dire De Le MathBat) : qu'il est fort ce 4Ever quand même !).

Matériel requis



Il vous faudra :

[ Un ordinateur avec une pomme dessus (toutes les pommes peuvent convenir, évitez cependant les SE l'écran est assez fatiguant, et puis ça chauffe vite...) ;
* L'application AppleScript Editor adapté au systeme de la bécanne (normalement elle est dessus de série) ;
* De la patience... (iTunes en fond de tâche ça aide) ;
* Des images à placer en fond d’écran.


Avant tout, la théorie



AppleScript est un langage de pilotage, d'automatisation de tâches, que ce soit pour le système ou pour les applications. Sa caractéristique clé est sa capacité a envoyer des commandes aux objets de différentes applications, y compris à ceux du Finder. Son but est d'interagir avec les applications afin de limiter les taches répétitives qui ne sont alors plus effectuées par l'utilisateur.

Pour cela, il peut capter des signaux envoyés par l'ordinateur (lors de l'arrivée d'un message sur irc, par exemple) et envoyer à celui-ci des instructions de manière simple, par l'intermédiaire des Apple Events.

De plus, pour pouvoir être utilisé par un plus grand nombre il utilise une syntaxe, qui, selon ses concepteurs, permet de l'appréhender de manière aussi intuitive que l'anglais. Certes, c'est agréable à lire, mais utiliser : set [variable] to [valeur] au lieu de l'habituel : [variable] = [valeur] ou : [variable] := [valeur] constitue plus, pour moi, une perte de temps qu'une simplification.

Enfin, et là, c'est tout simplement génial, l'éditeur présente le script tout seul, en le mettant en forme, avec des couleurs différentes pour les variables, fonctions, commentaires, texte non débugué, etc... On se rapproche de la perfection. Une fenêtre peut même être ouverte lors du débuggage d'un script pour voire quelles instructions sont effectuées et leurs résultat ("Event log", ou "pomme-e").

Un dernier avantage est que les scripts écrits sont a priori compatibles OS X et systèmes classiques, les jeux d’instructions (OSAX) de base étant les mêmes.

Passons à la pratique



Scripter le changement automatique de fond d'écran

Ça y est, on a compris ce que c'était, maintenant on voudrait bien le faire tourner, cette application. Quand vous le lancez (Il faut double-cliquer dessus... Et en faisant confiance a la gravité, ça devrait passer... ), l'éditeur de script vous affiche une fenêtre avec 3 boutons ("record", "stop", et "play") ainsi qu'un champ pour le texte, où il faut taper le script (et pas la liste des courses, même si ScriptEditor peut aussi servir a éditer du texte brut, ce qui est parfois utile...).
On va commencer par un petit "hello world"... Tapez ceci :

tell application "finder"
display dialog "hello world" buttons {"boujour a toi..."} with icon 2
end tell


Et là, merveille ! une fenêtre apparaît...
Scripter le changement automatique de fond d'écran

Bon, alors comme c'est une syntaxe qui est semblable a l'anglais, j'ai rien a expliquer, si ce n'est que tell application finder permet de dire que l'on va travailler avec l'application "finder", jusqu'à end tell, ce qui permet d'utiliser ses instructions (ici : display dialog), et le signe ¬ veut dire que l'on ne va a la ligne que pour clarifier la présentation (les lignes deux et trois sont équivalentes a : display dialog "hello world" buttons {"boujour a toi..."} with icon 2.

Si vous voulez connaître la liste des commandes offertes par une application, il suffit de glisser son icône sur l'éditeur de script, et vous pourrez alors la faire quitter (quit, c'est universel), la faire bipper (beep, universel aussi ), mais aussi lui faire envoyer des mails, envoyer des messages aux bots IRC, voire même scripter votre rush 6 zerglings a Starcraft... (euh... non, starcraft n'est pas apple-scriptable... dommage...).

Pour ceux qui veulent aller plus loin, je vais vous apprendre a changer automatiquement le fond d'écran au démarrage (très utile pour les fonds d'écran d'Anna quand on en a beaucoup).

Script de changement du fond d'écran



Alors, tout d'abord, expliquons le principe : il s'agit de choisir, a chaque démarrage, une image que l'on proposera au système comme fond d'écran. Pour ce faire, on créera un fichier (ici mac4ever.jpg) que l'on changera a chaque démarrage. Le système, au démarrage suivant, appliquera donc comme fond d'écran l'image choisie au démarrage antérieur. Pour ce faire, nous aurons besoin de l'intruction copy (pour copier l'image), delete (pour la supprimer), if* (pour faire des choix), et random number (pour choisir aléatoirement le fichier).

En voici les syntaxes (si vous voulez plus d'infos, vous pouvez chercher dans l'excellent Guide Apple Script en français) des commandes que nous allons utiliser :

copy [file path] to [folder]
delete [file path]
empty trash (attention à ne pas supprimer des fichiers par erreur)
random number from [plus petit nombre] to [plus grand nombre] with seed 0 (l'instruction with seed 0 permets de réinitialiser le gestionnaire aléatoire)
if [condition] then
[liste d'instruction]
end if


Voici donc la syntaxe a adopter :

tell application "finder"
([ on travaille avec le Finder, pour pouvoir utiliser les instructions move, delete, empty trash... ])

if file "mac4ever.jpg" of folder ("MACosX:Pictures copy") exists then
-- on supprime l’ancien fond d’écran
delete (file ("mac4ever.jpg") of folder "MACosX:Pictures copy")
end if

([ ici, il s'agit de choisit un élément au hasard parmi une liste, pour cela on compte le nombre d'éléments dans le fichier, on choisi aléatoirement un de ces éléments, que l'on copie dans le dossier d'images et que l'on renomme sous le nom mac4ever.jpg. l'image est ainsi modifiée. ])

set NbElements to count file in folder "MACosX:Pictures copy"
set i to random number from 1 to NbElements with seed 0
set nvlpic to file i of folder "MACosX:Pictures copy"
set newfil to duplicate nvlpic to folder ("MACosX:Pictures copy")
set name of newfil to "mac4ever.jpg"

end tell


Les symboles -- et ([…]) permettent d'inserer des commentaires au sein du script afin de rendre sa lecture aisée... N'oubliez pas par ailleurs de remplacer "MACosX:Pictures copy" par le chemin d'acces de votre fichier.

Il vous suffit ensuite d’enregistrer le script sous la forme d’une application (désactiver "l’écran de démarrage") et ensuite de démarrer une fois le script, de le placer dans le dossier ouverture au démarrage, et de mettre l’image "mac4ever.jpg", crée par le script, en fond d’écran.

Problèmes du script et solutions



Le script crée est court, facile a mettre en œuvre. Il présente cependant des défauts :
* Tout d’abord, il supprime tout élément se trouvant dans la corbeille au démarrage… Ce qui peut etre ennuyeux, surtout si vous êtes du genre distrait.
* De plus, pour changer de dossier de fond d’écran, il vous faudra "mettre les mains dans le cambouis", et retaper son chemin d’accès… Peu élégant, et très peu flexible.

Problème du fichier se trouvant dans la corbeille lors du démarrage



Il suffit de vérifier que la corbeille ne contient qu’un élément (celui que l’on veut supprimer) avant de la vider. Sinon, on affichera un dialogue demandant si il souhaite, ou non, vider la corbeille.

La syntaxe du dialogue est : display dialog « texte a afficher » default answer « meuh » buttons {liste de boutons} default button « nom du boutton par déafaut » with icon x (en sachant que chacun des éléments après le texte a afficher est optionnel, que [i[x]/i] est un nombre compris entre 0 et 2, et que le nom du bouton par défaut doit être un élément de la liste des boutons).

La syntaxe a adopter (qui donne un bon exemple de structure if-then-else) est donc :

if (count items in trash) = 1 then
empty trash else
([ au cas ou d'autres fichiers sont dans la corbeille, on demande double confirmation avant de supprimer. ])
set MaDialog to display dialog "Bureau Aléatoire Alert : La corbeille contient d'autres éléments que la copie de l'ancienne image" buttons {"Vider quand même", "Laisser telle quelle"} with icon 2
if button returned of MaDialog is "Vider quand même" then set MaDialog2 to display dialog "Bureau Aléatoire Alert : Tous les fichiers de la corbeille seront supprimés" buttons {"Confirmer", "Annuler"} ¬
default button "annuler" with icon 0
if button returned of MaDialog2 is "confirmer" then empty trash
end if

end if
end if
end if


Notons que, pour obtenir les résultats d’un dialogue (text returned, button returned, etc.), il faut enregistrer celui-ci dans une variable (ici MaDialog) et utiliser les variables de résultats par défaut : button returned, text returned, etc. en précisant la boîte de dialogue a laquelle elles font référence.

Éviter de mettre le chemin de dossier directement dans le script



Pour cela, on demande à l'application "Finder" d’afficher un dialogue pour enregistrer le chemin d’accès d’un dossier choisi par l’utilisateur, grâce à cette commande :

set mafold to Choose folder with prompt « Entrez le nom du dossier »

Enfin, il faut enregistrer ce résultat dans un fichier pour ne pas avoir à le rechercher a chaque démarrage. Pour créer le fichier, on utilise la commande open access file « nom du fichier » qui crée le fichier si il n’existe pas (attention, ne pas oublier de faire close access ensuite, sinon le fichier restera ouvert).

Le nom du fichier de préférences sera le même que celui de l’application, avec "prefs" rajouté a la suite, d’où les deux premières lignes rajoutées.

Au lancement, deux cas se présentent : soit le fichier de préférence existe (if file preffile exists then), et dans ce cas on le lit pour déterminer le chemin d’accès du dossier, soit il n’existe pas, et il faut alors le créer après avoir demandé a l’utilisateur de choisir son dossier. On y écrit alors le chemin d’accès : commande write. Ce qui donne la syntaxe suivante :

set loc to (path to me) as string
set PrefFile to loc & "Prefs"

if file PrefFile exists then set mafold to (read file PrefFile)
else
set mafold to choose folder with prompt ¬
"Choisissez un dossier contenant les images de démarrage."
open for access file PrefFile close access file PrefFile
write (mafold as string) to file PrefFile starting at 1 open mafold
end if
end if


Pour les étourdis…



On pourra éventuellement mettre au premier lancement du script une fenêtre pour vérifier qu’un alias du fichier est bien placé dans "Ouverture au démarrage", ainsi qu’une éventuelle aide sommaide :

set MaDialog3 to display dialog ¬
"N'oubliez pas de mettre l'image mac4ever.jpg en fond d'écran dans les préférences système... et de lancer cette application a chaque démarrage." buttons {"Aide", "OK"} ¬ with icon 2
if (button returned of MaDialog3) = "Aide" then

display dialog ¬
"Pour lancer l'application à chaque démarrage, il suffit de :
* glisser un alias (pomme-M) dans le dossier ouverture au demarrage (Mac OS 8 ou 9)
* ouvrir le tableau de bord "Login" (Mac OS X)." buttons {"Okay, j'ai compris"}
end if


Lien et script complet




Guides AppleScript (en francais)
excellente compilation de fond d'écrans


Script Complet ( a enregistrer au format application ... )

-- declaration des variables
global nvlpic
global mafold
global PrefFile
-- lecture ( ou création ) du fichier de preferences
tell application "Finder"
set loc to (path to me) as string
set PrefFile to loc & "Prefs"
if file PrefFile exists then
set mafold to (read file PrefFile)
else
set mafold to choose folder with prompt ¬
"Choisissez un dossier contenant les images de démarrage."
open for access file PrefFile
close access file PrefFile
write (mafold as string) to file PrefFile starting at 1
open mafold
set MaDialog3 to display dialog ¬
"N'oubliez pas de mettre l'image mac4ever.jpg en fond d'écran dans les preferences système... et de lancer cette application a chaque démarrage." buttons {"Aide", "Ok"} ¬
with icon 2
if (button returned of MaDialog3) = "aide" then
display dialog ¬
"Pour lancer l'application a chaque démarrage, il suffit de :
-glisser un alias (pomme-M) dans le dossier ouverture au demarrage ( OS 8 ou 9 )
-ouvrir le tableau de bord login ( OS X )." buttons {"okay, j'ai compris"}
end if
end if

-- suppression de l'image mac4ever.jpg pour la remplacer par une autre
if file "mac4ever.jpg" of folder mafold exists then
delete file ("mac4ever.jpg") of folder mafold
([ on vérifie que le fichier est bien seul dans la corbeille
pour ne pas supprimer par erreur un fichier utilisateur ])
if (count items in trash) = 1 then
empty trash
else
([ au cas ou d'autres fichiers sont dans la corbeille, on demande
donble confirmation avant de supprimer. ])
set MaDialog to display dialog ¬
¬
"Bureau Aléatoire Alert :
La corbeille contient d'autres éléments que la copie de l'ancienne image" buttons {"vider quand meme", "laisser telle quelle"} ¬
with icon 2

if button returned of MaDialog is "vider quand meme" then
set MaDialog2 to display dialog ¬
¬
"Bureau Aléatoire Alert:
Tous les fichiers de la corbeille seront supprimés" buttons {"confirmer", "annuler"} ¬
default button ¬
"annuler" with icon 0
if button returned of MaDialog2 is "confirmer" then
empty trash
end if
end if
end if
end if
-- on choisit l'image

set NbElements to count file in folder mafold
set i to random number from 1 to NbElements with seed 0
set nvlpic to file i of folder mafold
set newfil to duplicate nvlpic to folder mafold
set name of newfil to "mac4ever.jpg"
end tell

Un séjour à l'Apple Park et des AirPods Max pour le Swift Student Challenge 2024

Un séjour à l'Apple Park et des AirPods Max pour le Swift Student Challenge 2024

Juste après l'annonce de la WWDC 2024 et comme de coutume, Apple vient de dévoiler les résultats de son Swift Student Challenge.

Face aux piratages massifs, les messageries des ENT (collèges et lycées) sont suspendues !

Face aux piratages massifs, les messageries des ENT (collèges et lycées) sont suspendues !

Avec plus de 300 attaques enregistrées ces derniers jours sur les Espaces Numériques de Travail des collèges et lycées...

Ce patch doublé d'une IA redonne la parole à ceux qui ont perdu la voix

Ce patch doublé d'une IA redonne la parole à ceux qui ont perdu la voix

Les chercheurs de l'Université de Californie à Los Angeles (UCLA) viennent de déclarer avoir mis au point un patch électronique...

Phil Schiller, retraité et défenseur de la vision de Steve Jobs

Phil Schiller, retraité et défenseur de la vision de Steve Jobs

Alors que les enquêtes se multiplient contre Apple et l'App Store, un seul homme semble se démarquer des autres ! Non ce n'est pas Batman,...

Free lance une nouvelle Freebox Pop avec du Wi-Fi 7 !

Free lance une nouvelle Freebox Pop avec du Wi-Fi 7 !

Après la Freebox Ultra, Free propose désormais la Freebox Pop en version compatible avec le Wi-Fi 7, et ce sans hausse du tarif.

Elon Musk va activer Grok pour tous les abonnés de X Premium

Elon Musk va activer Grok pour tous les abonnés de X Premium

Depuis une dizaine de jours, Grok, l'IA générative d'Elon Musk, est disponible en open source. À présent, la société...

La WWDC 2024 sera résolument dédiée à l'IA (premier teasing d'Apple)

La WWDC 2024 sera résolument dédiée à l'IA (premier teasing d'Apple)

Il y a moins d'une heure, Apple a confirmé que sa 35e WWDC se tiendra du lundi 10 juin au vendredi 14 juin 2024. Et il semblerait qu'une annonce...

Apple confirme sa WWDC 2024 du 10 au 14 juin

Apple confirme sa WWDC 2024 du 10 au 14 juin

Et pour bien finir la journée, Apple vient d'annoncer que sa 35e WWDC se tiendra du lundi 10 juin au vendredi 14 juin 2024.

Commentaires

Connectez-vous/créez un compte pour réagir à cet article !
Oops, vous n'êtes pas connecté

Pour évaluer un commentaire sur Mac4Ever, vous devez être connecté avec votre compte utilisateur.

10 commentaires
Connectez-vous/créez un compte pour réagir à cet article !
Oops, vous n'êtes pas connecté

Pour évaluer un commentaire sur Mac4Ever, vous devez être connecté avec votre compte utilisateur.