Public Class Form1
'
' 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
Public ArrayFilter() As String = {".gif", ".jpg", ".png", ".bmp"}
Dim ElencoImgFile As New ArrayList
Dim NotifyIcon As New System.Windows.Forms.NotifyIcon
'
' Enumeratore delle impostazioni
'
Private Enum DesktopStile As Integer
Replace = 0 'Adatta alla grandezza dello schermo
Tiled = 1 'Replica/Affianca
Centred = 2 'Centrale
Streched = 4 'Estesa
None = 5
End Enum
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Percorso del file completo
'Dim FileImgPatch As String = "C:\Documents and Settings\All Users\Documenti\Immagini\Immagini campione\Tramonto.jpg"
'Inserisco il percorso della cartella Immagini
Dim DirImgPatch As String = "C:\Documents and Settings\All Users\Documenti\Immagini\Immagini campione\"
'Carico elenco di file in base al filtro di Immagini impostato precedentemente
ElencoImgFile = CaricaArrayFile(DirImgPatch)
'Carico l'oggetto ContexMenuStrip
Dim Timer As New System.Windows.Forms.Timer
AddHandler Timer.Tick, AddressOf Tmr_Tick
'Gestione del cambio immagine ogni Ora
'Timer.Interval = 60000 'Ogni 60 secondi cambia immagine il Desktop
Timer.Interval = 216000000 'Inizia contare, ogni ora cambia. (60 secondi = 60000) ( 60 minuti = 3600000)
Timer.Enabled = True 'Attivo il contatore
Me.Opacity = 0 'Per renderlo invisibile
Me.ShowInTaskbar = False 'Per non far vederlo nella barra
'Carico l'oggetto ContexMenuStrip
Dim MenuTendina As New System.Windows.Forms.ContextMenuStrip
AddHandler MenuTendina.ItemClicked, AddressOf cms_ItemClicked
'Carico in Runtime elenco del Menu a Tendina
MenuTendina.Items.Add("&Info").Name = "mnuInfo"
MenuTendina.Items.Add("-").Name = "mnuSpazio"
MenuTendina.Items.Add("&Chiudi").Name = "mnuEsci"
'Carico le icone al menu Converto una icona in un immagine .ToBitmap
MenuTendina.Items(0).Image = New Icon(Application.StartupPath & "\122.ico").ToBitmap 'Punta all'icona Info ?
MenuTendina.Items(2).Image = New Icon(Application.StartupPath & "\104.ico").ToBitmap 'Punta all'icona Chiudi X
NotifyIcon.BalloonTipIcon = ToolTipIcon.Info
NotifyIcon.BalloonTipTitle = "Avviato il programma :"
NotifyIcon.Text = "Random Image Desktop"
NotifyIcon.Icon = New Icon(System.Windows.Forms.Application.StartupPath & "\117.ico")
NotifyIcon.Visible = True
NotifyIcon.ContextMenuStrip = MenuTendina
End Sub
Private Sub cms_ItemClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs)
'MessageBox.Show(e.ClickedItem.Text)
'MessageBox.Show(e.ClickedItem.Name)
Select Case e.ClickedItem.Name
Case "mnuInfo"
MsgBox("Autore : ImaginSystems " & vbNewLine & vbNewLine _
& "Funzione: Il programma cambia in maniera Random lo sfondo del Desktop" & vbNewLine & vbNewLine _
& "Web: http://blogs.dotnethell.it/imaginsystems/", vbInformation, "AIUTO by ImaginSystems")
Case "mnuEsci" NotifyIcon.Visible = False
End
End Select
End Sub
Private Sub CambiaImg(ByVal FileImgPatch As String)
Dim img As Image = System.Drawing.Image.FromFile(FileImgPatch)
WallpaperChange(img, , DesktopStile.Streched)
End Sub
Private Function CaricaArrayFile(ByVal Dir As String) As ArrayList
Dim ArrayFile As New ArrayList
' Processa la lista dei files trovati nella directory passata
Dim fileEntries As String() = System.IO.Directory.GetFiles(Dir)
For Each fileName As String In fileEntries
For i As Integer = 0 To ArrayFilter.Length - 1
If fileName.Contains(ArrayFilter(i).ToString) Then
ArrayFile.Add(fileName)
End If
Next
Next
Return ArrayFile
End Function
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, "Desktop.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 ' Al centro
WallpaperStyle = "1"
TileWallpaper = "0"
Case DesktopStile.Streched ' Estesa
WallpaperStyle = "2"
TileWallpaper = "0"
Case DesktopStile.Tiled 'Affiancata
WallpaperStyle = "1"
TileWallpaper = "1"
Case DesktopStile.None 'Nessuno Vuoto
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) ' Imposta lo sfondo del desktop
End Sub
Private Sub Tmr_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim NumeroRandom As New Random
CambiaImg(ElencoImgFile(NumeroRandom.Next(0, ElencoImgFile.Count - 1)).ToString)
End Sub
End Class