Paulo Nobre Postado Agosto 9, 2006 Denunciar Share Postado Agosto 9, 2006 Prezados ColegasEstou 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 ); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thales Pontes Martins Postado Agosto 9, 2006 Denunciar Share Postado Agosto 9, 2006 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 ); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Agosto 9, 2006 Autor Denunciar Share Postado Agosto 9, 2006 É, 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 WallpaperC:\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 parapapel 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 ); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thales Pontes Martins Postado Agosto 9, 2006 Denunciar Share Postado Agosto 9, 2006 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\Microsoftao invés deC:\Documents and Settings\Thales\Configurações locais\Dados de aplicativos\Microsoftcomo 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Agosto 9, 2006 Autor Denunciar Share Postado Agosto 9, 2006 Valeu Thales, pela explicação.Pode mandar para mim, por favor.[]s Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thales Pontes Martins Postado Agosto 10, 2006 Denunciar Share Postado Agosto 10, 2006 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!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Agosto 10, 2006 Autor Denunciar Share Postado Agosto 10, 2006 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 últimopapel 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) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Paulo Nobre
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
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.