Configurez automatiquement le wallpaper de Windows (the other way!!)

Publié le 12 mai 2013 par Diagg @diagg

Woot.. en 2013 un post sur comment configurez sont wallpaper !!??? on rêve ou bien ? Et bien pas du tout, et si vous n’êtes pas arrivé sur cette page par hasard, vous savez déjà que le sujet est plus complexe qu’il n’y parait. Pour les autres ; petit récapitulatif avant d’entrer dans le vif du sujet :

Une recherche via Google renvoie le plus souvent à l’utilisation de la clef de registre suivante : HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System

Qui et l’équivalent de cette GPO  :

2 problèmes à cela :

  • le fait d’appliquer le paramètre en GPO  empêchera l’utilisateur de pouvoir changer de fond d’écran par la  suite.
  • l’utilisation de clefs de registre en …\Policies\… n’est pas digne d’un administrateur réseau qui se respect. Mitch Tulloch, (auteur entre autre du Kit de ressources de Windows 7) vous explique pourquoi ici.

Bon, qu’avons nous d’autre alors ?

Il y’ a bien l’historique clef  HKCU\Control Panel\Desktop\Wallpaper

mais elle souffre, comme sa consœur, d’un petit problème :

  • l’application de cette clé nécessite un rafraichissement des donnée de base de registre par le système. Cette opération était possible grâce à la commande  RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters malheureusement cette commande ne fonctionne plus depuis Windows 7, il faut donc rebooter pour voir le fond d’écran changer… ça marche, mais c’est vraiment pas classe…

Enfin, il y’a la possibilité d’utiliser l’encore plus historique commande SetWallpaper d’OptimumX qui aurait très bien fait l’affaire si elle n’était pas incompatible avec Windows 8… heureusement, il existe une alternative qui elle fonctionne très bien et qui s’appelle WallpaperChanger.

Je pourrai arrêter ce billet ici et me contenter de WallpaperChanger, cependant, j’avais déjà trouvé une solution alternative avant de tomber sur cet outil.

Cette solution à notamment comme avantages de ne pas utiliser d’outils externe et d’être très légère au niveau ressources (comparativement, WallpaperChanger  qui est écrite en C# revient à d’utiliser une moissonneuse batteuse pour couper une fleur…. ça marche mais c’est un peu extrême…)

La solution

J’ai réemployé une technique des Deployment Guys pour appliquer mon Wallpaper en faisant exécuter par un script une commande se trouvant dans un menu contextuel.

Dans notre cas la commande à exécuter apparait lorsque l’on clique avec le bouton droit sur un fichier image :

le reste est presque un copier/coller du script originale :

Const CSIDL_WINDOWS = &H24
Subpath = "\web\wallpaper\"
Set objShell = CreateObject("Shell.Application")
Set objAllUsersProgramsFolder = objShell.NameSpace(CSIDL_WINDOWS)
strAllUsersProgramsPath = objAllUsersProgramsFolder.Self.Path
Set objFolder = objShell.Namespace(strAllUsersProgramsPath & Subpath)
Set objFolderItem = objFolder.ParseName("MyWallpaper.jpg")
Set colVerbs = objFolderItem.Verbs
For Each objVerb in colVerbs
If Replace(objVerb.name, "&", "") = "Choisir comme arrière-plan du Bureau" Then objVerb.DoIt
Next

L’image doit être placé dans le répertoire C:\Windows\web\Wallpaper (vous pouvez choisir un autre emplacement en modifiant les deux premières lignes)

Remplacez MyWallpaper.jpg par le nom de votre fichier image et lancez le script en contexte utilisateur (Active setup, Script d’ouverture de session, profil par défaut, whatever…)

L’image sera appliqué immédiatement, le script ne requière pas de droit d’administrateur pour s’exécuter, et il n’est plus nécessaire d’utiliser d’outil externe… le bonheur !!!

Dernier point : si vous utilisez le script sur un OS non français, il faudra remplacer la chaine “Choisir comme arrière-plan du Bureau” dans l’avant dernière ligne par son équivalent dans la langue de votre OS  pour que cela continue de fonctionner.