Ir para o conteúdo

Alterar o Wallpaper do Sistema Operativo

A alteração do wallpaper (ambiente de trabalho) do sistema operativo é sempre uma acção muito utilizada e que muitos aproveitam para criar pequenos aplicativos para o fazer (embora já existam várias ferramentas disponíveis).

A alteração do wallpaper pode-se fazer muito simplesmente através da API SystemParametersInfo. Um dos problemas que normalmente se vê em alguns códigos para alterar o wallpaper do computador, é a utilização de ficheiros *.jpg, *.png, etc, sem a conversão para um formato BMP (que o sistema aceita).

Fica um exemplo de como fazer esta alteração:

Exemplo

    ' Declaração da API que irá alterar o wallpaper
    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

    ' Definição das constantes
    Private Const SPI_SETDESKWALLPAPER = 20
    Private Const SPIF_UPDATEINIFILE = &H1

    ''' <summary>
    ''' Muda o wallpaper do computador
    ''' </summary>
    ''' <param name="imagePath">Endereço completo da imagem</param>
    ''' <remarks></remarks>
    Private Sub SetWallpaper(ByVal imagePath As String)

        ' Verifica se o ficheiro existe
        If Not IO.File.Exists(imagePath) Then
            Throw New Exception("O ficheiro indicado não existe!")
        End If

        Try

            Dim imgName As String

            ' Caso o ficheiro indicado não seja um *.bmp é necessário
            ' converter para tal, de modo a que este funcione
            If IO.Path.GetExtension(imagePath) <> ".bmp" Then

                ' Cria o ficheiro *.bmp
                imgName = IO.Path.ChangeExtension(imagePath, "bmp")

                ' Cria uma nova image e grava como *.bmp
                Using bm As Bitmap = Image.FromFile(imagePath)
                    bm.Save(imgName, Imaging.ImageFormat.Bmp)
                End Using 

            Else
                imgName = imagePath
            End If


            ' Define o novo wallpaper
            SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, imgName, SPIF_UPDATEINIFILE)

        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try

    End Sub

Para alterar o wallpaper é apenas necessário fazer:

     SetWallpaper("c:\imagem.jpg")