Ir para conteúdo
Fórum Script Brasil
  • 0

Wallpaper


Paulo Nobre

Pergunta

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 para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...