Jump to content
Fórum Script Brasil
  • 0

Wallpaper


Paulo Nobre

Question

Prezados Colegas

Estou brincando de trocar o papel de parede do windows, mas um problema ocorre comigo.

Em HKey_Current_User\Control Panel\Desktop existem algumas chaves que tratam do papel de

parede.

Alguns livros ensinam que na chave Wallpaper, você armazena o endereço da figura que será usada.

Apenas trocar este endereço não faz mudar o papel de parede.

Aí indo mas fundo descobre-se que temos que usar a função:

SystemParametersInfo( SPI_SETDESKWALLPAPER,0, Nil, SPIF_SENDWININICHANGE );

(Não tenho amenor idéia do significado ods parâmetros)

Escrevendo um código, que trabalha no registro, com a função acima, consegue-se trocar o papel de parede.

Alguém a esta altura deve estar se perguntando: Qual é o problema?

O problema é o seguinte:Se a figura escolhida tem extensão bmp não existe nenhum problema.

Se a figura tem extensão jpg o papel de parede não é trocado.

Resolvi da seguinte maneira: Quando a figura é jpg faço a conversão para bmp e tudo bem.

Porém, nesta conversão é feita uma cópia do jpg como bmp, que é muito grande. Isto não está bom.

Não estou conseguindo trocar o papel de parede quando ele é jpg a não ser desta forma.

Alguém sabe como o windows trata isto, se ele converte, esconde e apaga o arquivo depois, ou qualquer outra coisa semelhante.

Existe uma chave também em HKey_Current_User\Control Panel\Desktop , que se chama

ConvertedWallpaper, que observei armazenar o endereço do papel trocado apenas quando ele tem

extensão jpg. Existe alguma coisa aí que não consegui descobrir.

Porisso a pergunta: Alguém já brincou de trocar papel de parede do windows?

será que tem a ver com algum parâmetro da função

SystemParametersInfo( SPI_SETDESKWALLPAPER,0, Nil, SPIF_SENDWININICHANGE );

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

Voce está fazendo da maneira correta. Não é possivel passar um JPG como papael de parede, tem que converter para bitmap e deixar num arquivo temporário. É exatamente oque o Windows faz. Aqui no meu o arquivo temporario é C:\Documents and Settings\Thales\Configurações locais\Dados de aplicativos\Microsoft\Wallpaper1.bmp.

esse comando coloca o caminho do arquivo temp na variavel pc que é do tipo array [1..255] of char.

SystemParametersInfo(115,255,@pc,SPIF_SENDWININICHANGE );

Link to comment
Share on other sites

  • 0

É, realmente Thales, porisso é que quando o papel de parede já é bmp na string(regedit)

wallpaper aparece o caminho completo incluindo o nome.bmp.

Já, sempre que é jpg, não importando o nome do arquivo que apararece, na string Wallpaper

C:\Documents and Settings\Professores\Configurações locais\Dados de aplicativos\Microsoft\Wallpaper1.bmp.

Desta forma evita-se duplicar todos os arquivos jpg do computador que forem usados para

papel de parede.

Não é isso, Thales?

Achei estranho é que não consigo ver este wallpaper1.bmp, nem mandando exibir todos os arquivos.

Você visualiza ele na pasta citada acima?

Thales, você poderia detalhar para mim o seu último comentário:

esse comando coloca o caminho do arquivo temp na variavel pc que é do tipo array [1..255] of char.
SystemParametersInfo(115,255,@pc,SPIF_SENDWININICHANGE );

Link to comment
Share on other sites

  • 0
Achei estranho é que não consigo ver este wallpaper1.bmp, nem mandando exibir todos os arquivos.

Você visualiza ele na pasta citada acima?

hahaha, eu também não consegui ver da primeira vez porque estava entrando na pasta ->

C:\Documents and Settings\Thales\Dados de aplicativos\Microsoft

ao invés de

C:\Documents and Settings\Thales\Configurações locais\Dados de aplicativos\Microsoft

como o caminho é muito grande agente acaba resumindo um pouco, hahaha!

Thales, você poderia detalhar para mim o seu último comentário:

é o seguinte, os parametros dessa função(SystemParametersInfo) dependem doque se está querendo fazer, oque é informado no primeiro parametro.

SPI_SETDESKWALLPAPER -> mudar o papel de parede, constante igual a 20.

SPI_GETDESKWALLPAPER -> pegar o caminho do papel de parede, constante igual a 115.

essa constante não é declarada no delphi, por isso eu tive que colocar seu valor(115).

bom, quando o primeiro parametro é pegar o papel de parede(115) os outros parametros tem o seguinte significado ->

segundo parametro -> quantidade máxima de caracteres que pode ser gravada no endereço especificado no terceiro parametro.

terceiro parametro -> endereço de uma variavel que poderá receber uma quantidade de caracteres especificada no segundo parametro.

quarto parametro -> não faço a menor idéia, só copiei o que você escreveu primeiro.

O Delphi 2006 tem uma explicação detalhada sobre todas as operações que se pode fazer com esse comando(SystemParametersInfo), se quiser posso te mandar.

Link to comment
Share on other sites

  • 0

ooooooo, Paulo, esquecí de dizer uma coisa: nesse seu comando { SystemParametersInfo( SPI_SETDESKWALLPAPER,0, Nil, SPIF_SENDWININICHANGE ); } ->

você falou que não sabe oque significam os parametros, mas para trocar o papel de parede não precisa de mecher no registro, é só substituir o terceiro parametro de nil para um ponteiro para o caminho do novo papel de parede ->

var 
  st : string;
begin
  st:='H:\Dados\Playboy\Adriana Lima.bmp';
//Todos os meus papéis de parede estão na pasta Playboy, hehehe!
  systemparametersinfo(SPI_SETDESKWALLPAPER,0,pointer(st),SPIF_SENDWININICHANGE);
end;

Aqui o segundo parametro não significa nada.

No 3º Parametro não se pode colocar @st porque o tipo string já é um ponteiro, então essa expressão retornaria um ponteiro para o ponteiro, e oque se quer é um ponteiro para o texto.

Falou!!!

Link to comment
Share on other sites

  • 0

Falou, Thales.

Inclusive, esta sua pasta de papéis de parede é muito boa. hehehehehe!

Mas, no meu caso vou ter que mecher(usar) no registro, pois gostaria de armazenar o último

papel de parede usado depois da mudança para reverter ao papel anterior.

Teria um botão no form para uma reversão imediata.

Desta forma que estou fazendo tem umas complicações a mais, pois ele, o windows, armazena qualquer papel que foi convertido de jpg para bmp, com o mesmo nome (\..\Wallpaper1.bmp)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.8k
×
×
  • Create New...