Mac4Ever Refurb Guide d'achat Apple - Des conseils sur toute la gamme Apple Débuter sur Mac
Scripter le changement automatique de fond d'écran
Actu Dossiers Forum Photos/Podcasts Petites Annonces V.I.P.
5090 connectés

Scripter le changement automatique de fond d'écran

Le 15/08/2002 à 00h00
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 x 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

partage email

Les bases de la programmation

Compiler un programme C++

chargement des réactions

Réagissez à ce dossier !

Pour réagir directement dans le forum, cliquez ici.
Pour réagir, vous devez être identifié.
Si vous ne possédez pas de compte, créez-en un !
Identifiant :
Mot de passe :
Gras Italique Souligné Image URL Smiley confus Smiley cool Smiley M. Vert Smiley malsain Smiley mort de rire Smiley geek Smiley surpris
Important : soyez concis, courtois et pertinents. (plus d'infos ?) Les messages injurieux et hors sujet seront effacés. En cas de non respect de ces instructions, le compte d'un utilisateur pourra être bloqué sans préavis.
Pour toute erreur dans un article, merci de nous le signaler en nous contactant ici.

Conseils d'achat

  • Macintosh

  • iPhone, iPad & iPod

iMac 27" 5k Indicateur vert Informations 06/2017 2099 € L'iMac 27" (Retina) a été mis à jour le 5 juin 2017 avec Thunderbolt 3, GPU dédié et puces Kaby-Lake. Pas de mise à jour prévue avant de longs mois, même si l'on attend des modèles Coffee Lake (à 6 coeurs d'ici le courant du printemps/été 2018)
iMac 21,5" 4k Indicateur vert Informations 06/2017 1499 € L'iMac 21,5" (Retina) a été mis à jour le 5 juin 2017 avec Thunderbolt 3, GPU dédié et puces Kaby-Lake. Pas de mise à jour prévue avant de longs mois, même si l'on attend des modèles Coffee Lake (à 6 coeurs d'ici le courant du printemps/été 2018)
Apple TV 4k Indicateur vert Informations 09/2017 199 € L'Apple TV 4k est une petite évolution de l'Apple TV pour les téléviseurs 4k. Il gère le HDR, le HDMI 2a et tous les codecs récents. Si vous avez une télévision OLED 4k, il s'agit du modèle idéal. Son prix est raisonnable par rapport à la version HD, qui reste au catalogue.
iMac Indicateur vert Informations 06/2017 1299 € L'iMac 21,5" (non Retina) a été mis à jour le 5 juin 2017 avec Thunderbolt 3 et puces Kaby-Lake. Pas de mise à jour prévue avant de longs mois !
iMac Pro Indicateur vert Informations 12/2017 5499 € L'iMac Pro est actuellement le Mac le plus puissant du marché. Il ne sera pas renouvelé avant une bonne année, sauf surprise. N'hésitez pas à consulter nos tests et nos vidéo avant de vous décider ! A noter qu'Apple va sortir un Mac Pro courant 2018 (ou 2019), donc si vous n'êtes pas trop pressé, il sera + modulaire...
Mac Mini Indicateur rouge Informations 10/2014 549 € Le Mac mini a été mis à jour fin 2014, avec quelques améliorations notables, comme Thunderbolt 2, WiFi ac. Son prix a également fortement baissé, mais au prix d'un boiter moins évolutif (RAM soudée) et d'absence de quadri-coeur. Une renouvellement pour la rentrée (voire fin 2017) est possible, même si Apple n'a pas l'habitude de mettre à jour cette machine très souvent. Regardez aussi du côté du Refurb, où l'on trouve régulièrement des modèles à partir de 459€ !
Mac Pro Indicateur rouge Informations 10/2013 3339 € Apple a annoncé un nouveau Mac Pro courant 2018 (voire 2019), plus modulaire et moins fermé que la version actuelle. Dans tous les cas, surtout n'achetez pas les modèles "tube" datant de 2013 et désormais assez dépassés.
MBP Retina 13" Indicateur vert Informations 06/2017 1499 € Le MacBook Pro 13" a été mis à jour le 5 juin 2017, avec peu de nouveautés, en dehors du passage à Kaby-Lake. Vous pouvez encore acheter tranquillement, aucune mise à jour prévue avant le printemps/été 2018 (avec des puces à 4 coeurs en vue !)
MBP Retina 15" Indicateur vert Informations 06/2017 2799 € Le MacBook Pro 15" a été mis à jour le 5 juin 2017, avec peu de nouveautés, en dehors du passage à Kaby-Lake et de "nouveaux" GPU. Vous pouvez encore acheter tranquillement, aucune mise à jour prévue avant le printemps/été 2018 (avec des puces à 6 coeurs en vue !)
MacBook Air Indicateur orange Informations 06/2017 1099 € Le MacBook Air a été "mis à jour" le 5 juin 2017, avec des fréquences légèrement supérieures, mais aucune autre nouveauté. Cette machine est en fin de vie et Apple ne lui accordera plus aucune vraie mise à jour. Achetez le plutôt sur le Refurb !
MacBook Indicateur vert Informations 06/2017 1499 € Le MacBook Pro a été mis à jour le 5 juin 2017, avec peu de nouveautés, en dehors du passage à Kaby-Lake. La prochaine mise à jour n'est pas attendue avant l'été 2018 (voire en milieu de printemps).
Apple TV 2015 Indicateur vert Informations 10/2015 159 € L'Apple TV 2015 est sortie fin 2015 et Apple le garde au catalogue malgré l'arrivée de la version 4k. Avec en prime, une petite baisse de prix ! Si vous n'avez pas de TV 4k, cela reste une bonne affaire.
Téléchargez nos
applications mobiles
À découvrir sur Mac4Ever
b 1  b 2 
Mon Mac4Ever
Pour participer, vous devez être identifié.
Si vous ne possédez pas de compte, vous pouvez en créer un gratuitement !
Identifiant :
Mot de passe :
Sondage
iPhone lent : la décision d'Apple (remplacement à 29€) vous satisfait-elle ?
5708 votes
app
  • Nouveautés

  • Gratuites

  • Payantes

A propos | Mentions légales | Infos Cookies | Contacts | Emploi | RSS | Apps