Changer son fond d’écran comme un geek
J’aime bien personnaliser mon fond d’écran. Je n’aime pas perdre cette petite liberté.
D’autant plus que chaque mois, Smashing Magazine (smashingmagazine.com) propose une sélection de wallpaper
Je ne sais pas ce qui m’a le plus motivé mais aujourd’hui nous allons voir comment changer son fond d’écran comme un geek.
Je vous passe la possibilité de l’UI.
Cela ne fonctionne qu’avac les .JPG et .BMP
1. Regedit simple
Si la sécurité est inexistante, ça peut marcher
HKEY_CURRENT_USER\Control Panel\Desktop.
Clé “Wallpaper” and double-click on it.
2. Regedit moins simple
On sait jamais sur un malentendu…
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System
clé de type [string] nommée Wallpaper
Si un GPO interdit la modification de cette clé dans la base de registre, on escalade.
3. Dev csharp
Pas besoin d’être admin.
private const int SPI_SETDESKWALLPAPER = 20;
private const int SPIF_UPDATEINIFILE = 0x1;
private const int SPIF_SENDWININICHANGE = 0x2;
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
public void ChangeWallpaper(string wallpaperPath){
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "(None)", SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, wallpaperPath, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
}
Si l’executable est bloqué ou si l’on ne dispose pas d’environnement de dev, on grimpe encore
4. Script PS
Toujours pas besoin d’être admin.
$setwallpapersource = @"
using System.Runtime.InteropServices;
public class wallpaper
{
public const int SetDesktopWallpaper = 20;
public const int UpdateIniFile = 0x01;
public const int SendWinIniChange = 0x02;
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern int SystemParametersInfo (int uAction, int uParam, string lpvParam, int fuWinIni);
public static void SetWallpaper ( string path )
{
SystemParametersInfo( SetDesktopWallpaper, 0, path, UpdateIniFile | SendWinIniChange );
}
}
"@
Add-Type -TypeDefinition $setwallpapersource
[wallpaper]::SetWallpaper($wallpaperPath)
Merci Siva Mulpuru
Si l’invite de commande PowerShell n’est pas accessible, on peut tenter de la lancer depuis l’invite de commande classique.
Voilà une bonne chose de faite.
Il faut traiter les choses légères avec sérieux et il faut traiter les choses graves et sérieuses avec légèreté.
- Alphonse