Notifications
Clear all

alterar plano de fundo da área de trabalho

6 Posts
4 Usuários
0 Reactions
2,464 Visualizações
 guma
(@guma)
Posts: 135
Estimable Member
Topic starter
 

É possível alterar o plano de fundo da minha área de trabalho com uma macro?
Achei o seguinte código, mas não funciona

Public Declare PtrSafe Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" ( _
    ByVal uAction As Long, _
    ByVal uParam As Long, _
    ByVal lpvParam As Any, _
    ByVal fuWinIni As Long) As Long

Public Const SPI_SETDESKWALLPAPER = 20
 
Sub teste()
    
    Dim nRetorno As Long
    Dim nImagem As String

    nImagem = "C:UsersUsuarioPicturesclaymore-2_3652_1440x900" 'PONHA AQUI SEU PAPEL
    nRetorno = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nImagem, 0)

End Sub

Acredito que esteja incompleto.

 
Postado : 25/02/2015 5:21 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Cara, não testei, mas dá uma olhada nestes links:

http://www.windows-commandline.com/chan ... mand-line/

http://www.mrexcel.com/forum/excel-ques ... excel.html

A combinação simples dos 2 (usando comandos do MS_DOS para mudar o papel de parede), deveria ser algo +/- assim:

Sub exemplo_nao_testado()
Shell "command.com /c reg add "HKEY_CURRENT_USERControl PanelDesktop" /v Wallpaper /t REG_SZ /d E:photosimage1.bmp /f"
Shell "command.com /c RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters"
End Sub

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 25/02/2015 7:13 am
 guma
(@guma)
Posts: 135
Estimable Member
Topic starter
 

ele dá erro na seguinte linha

Shell "command.com /c reg add "HKEY_CURRENT_USERControl PanelDesktop" /v Wallpaper /t REG_SZ /d E:photosimage1.bmp /f"

ele destaca HKEY_CURRENT_USER e diz que era esperado fim de instrução. :shock:

 
Postado : 25/02/2015 11:31 am
selmo
(@selmo)
Posts: 236
Estimable Member
 

O código que postou inicialmente funcionou perfeitamente, você por acaso verificou o caminho da imagem se estava correto? e só uma observação, coloque o nome da imagem assim como a extensão da mesma, assim por exemplo:
"nImagem = "C:PrivateSelmo_Rodriguesminhas imagensArtes e imagenscachorro.jpg""

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original."
Albert Einstein

 
Postado : 27/02/2015 11:11 am
(@gulcosta)
Posts: 1
New Member
 

Pessoal,

Estou tentando utilizar o código mencionado acima, porém o mesmo não funciona? alguém possui outro código?

segue abaixo o codigo que estou utilizando:

Public Declare PtrSafe Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" ( _
ByVal uAction As Long, _
ByVal uParam As Long, _
ByVal lpvParam As Any, _
ByVal fuWinIni As Long) As Long

Public Const SPI_SETDESKWALLPAPER = 20

Sub teste()

Dim nRetorno As Long
Dim nImagem As String

nImagem = "C:Usersgustavo.costaPictureslogo.jpg" 'PONHA AQUI SEU PAPEL
nRetorno = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nImagem, 0)

End Sub

abraços

 
Postado : 26/12/2016 12:22 pm
selmo
(@selmo)
Posts: 236
Estimable Member
 

O seguinte código foi testado em ambiente corporativo com um rígido controle de ações no terminal pelo usuário, e o procedimento funcionou perfeitamente. Adaptei parte do código com uma API, facilitando localizar a imagem antes de prosseguir, não sendo necessário inserir o caminho do arquivo diretamente no código:

O código para alteração do plano de fundo

Public Declare PtrSafe Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" ( _
ByVal uAction As Long, _
ByVal uParam As Long, _
ByVal lpvParam As Any, _
ByVal fuWinIni As Long) As Long

Public Const SPI_SETDESKWALLPAPER = 20

Sub AlterarPlanoFundo()

Dim nRetorno As Long
Dim nImagem As String

nImagem = OpenFileDialog 'FAZ A CHAMADA A FUNÇÃO PARA LOCALIZAR O ARQUIVO DE IMAGEM
If nImagem = "" Then Exit Sub 'CASO NÃO SEJA SELECIONADA NENHUMA IMAGEM, INTERROMPE A EXECUÇÃO
    
nRetorno = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nImagem, 0)
    'VERIFICA SE FOI ALTERADO OU NÃO O PLANO DE FUNDO
    If nRetorno = 1 Then
        MsgBox "A imagem do plano de fundo foi alterado corretamente!!!", vbInformation, "Selmo Rodrigues"
    Else
        MsgBox "Algo inesperado aconteceu, verifique o arquivo e tente novamente!!!", vbCritical, "Selmo Rodrigues"
    End If
End Sub

A seguinte API eu copie do site do Tomas Vasquez

Public Function OpenFileDialog() As String
    Dim Filter As String, Title As String
    Dim FilterIndex As Integer
    Dim Filename As Variant
    ' Define o filtro de procura dos arquivos
    Filter = "Arquivos de imagens (*.jpg),*.jpg,"
    ' O filtro padrão é *.*
    FilterIndex = 3
    ' Define o Título (Caption) da Tela
    Title = "Selecione um arquivo"
    ' Define o disco de procura
    ChDrive ("C")
    ChDir ("C:")
    With Application
        ' Abre a caixa de diálogo para seleção do arquivo com os parâmetros
        Filename = .GetOpenFilename(Filter, FilterIndex, Title)
        ' Reseta o Path
        ChDrive (Left(.DefaultFilePath, 1))
        ChDir (.DefaultFilePath)
    End With
    ' Abandona ao Cancelar
    If Filename = False Then
        MsgBox "Nenhum arquivo foi selecionado."
        Exit Function
    End If
    ' Retorna o caminho do arquivo
    OpenFileDialog = Filename
End Function

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original."
Albert Einstein

 
Postado : 27/12/2016 4:38 am