Ecco una semplice funzione che ci permette di sostituire lo sfondo del Desktop di Windows.
Oltre alla possibilità di scegliere il consueto tipo di allineamento (centrato, affiancato, o esteso), la funzione permette anche di impostare una nuova immagine mantenendo le impostazioni di visualizzazione attualmente in uso nel sistema.
Ecco il codice della routine:
'
' Utilizzata per modificare il wallpaper di Windows
'
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Integer, ByVal uParam As Integer, ByVal lpvParam As String, ByVal fuWinIni As Integer) As Integer
Const SPI_SETDESKWALLPAPER = 20
Const SPIF_UPDATEINIFILE = &H1
'
' Enumeratore delle impostazioni
'
Private Enum DesktopStile As Integer
Replace = 0
Tiled = 1
Centred = 2
Streched = 4
None = 5
End Enum
Private Sub WallpaperChange(Optional ByRef myImage As Image = Nothing, Optional ByVal fileName As String = "", Optional ByVal Stile As DesktopStile = DesktopStile.Replace)
'***********************************************************************************
'Func.: WallpaperChange (Mod SB-04/02/2008; Mod.: )
'Desc.: Modifica lo sfondo del desktop di Windows
'
'Par. : [myImage] Oggetto System.Drawing.Image rappresentante la nuova immagine da impostare come sfondo
' [FileName] Stringa indicante il nome del file completo di percorso dell'immagine da impostare come sfondo '
' [Stile] Integer indicante il tipo di operazione da compiere. I valori sono associati all'enum DesktopStile
'NB. : Se FileName è lasciato a blank o indica un percorso reale di un file , lo sfondo del desktop verrà rimosso.
'***********************************************************************************
Dim key As Microsoft.Win32.RegistryKey = My.Computer.Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", True)
Dim WallpaperStyle As Object = Nothing
Dim TileWallpaper As Object = Nothing
'
'
' Se ho passato solo l'immagine prima la salvo e poi punto al nuovo file
'
If fileName = "" And myImage IsNot Nothing Then
'
' Salvo l'immagine nella directory di windows
'
fileName = IO.Path.Combine(My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData, "Temp.bmp")
myImage.Save(fileName, System.Drawing.Imaging.ImageFormat.Bmp)
End If
'
' Se ho scelto l'opzione di sostituzione dello stile corrente, prima lo leggo e poi lo applico
'
If Stile = DesktopStile.Replace Then
WallpaperStyle = key.GetValue("WallpaperStyle")
TileWallpaper = key.GetValue("TileWallpaper")
End If
'
' Se ho scelto uno stile specifico lo applico
'
Select Case Stile
Case DesktopStile.Centred
WallpaperStyle = "1"
TileWallpaper = "0"
Case DesktopStile.Streched
WallpaperStyle = "2"
TileWallpaper = "0"
Case DesktopStile.Tiled
WallpaperStyle = "1"
TileWallpaper = "1"
Case DesktopStile.None
fileName = ""
End Select
'
' Cambio lo sfondo del desktop
'
key.SetValue("WallpaperStyle", WallpaperStyle)
key.SetValue("TileWallpaper", TileWallpaper)
key.Close()
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, fileName, SPIF_UPDATEINIFILE)
End Sub