Você está passando os parâmetros errados, usando as APIs erradas, e provavelmente passando um tipo de arquivo errado. O Windows XP só aceita arquivos .bmp, não .png ou .jpeg. Você precisa efetuar as conversões manualmente para .bmp se precisar usar com Windows XP; no Windows Vista ou 7 é possível passar um arquivo .jpg.
E
entanglement
O código abaixo funciona corretamente. Não se esqueça de usar as bibliotecas user32.lib e advapi32.lib.
Não se esqueça que usar um número mágico (20) não é recomendável em C++.
Em vez disso, você DEVE usar as constantes simbólicas, definidas na documentação (o MSDN é seu amigo de fé e seu irmão camarada )
Além disso, em C++ é aconselhável usar sempre o indicador de escopo global ("::") para indicar APIs do Windows.
E
eliangela
Obrigada pelas dicas!!
Eu realmente não sabia dessas coisas, porque só sei programar em java e estou tentando fazer uma DLL :shock:
Vou testar aqui e digo depois se funcionou!
Valeu
E
eliangela
entanglement, como que eu faço pra converter o JPG pra BMP?
Obrigada
E
eliangela
Ok… resolvido aqui… não vou fazer isso usando C++, vou fazer essa conversão usando Java.
Vou usar a minha DLL só pra alterar o registro do Windows.
Antes de mais nada, queria fazer só mais uma pergunta:
Após eu alterar o registro do windows, eu preciso reiniciar o computador para que as configurações sejam validadas?
Aquele parâmetro mágico passado para SystemParametersInfo (SPIF_SENDCHANGE | SPIF_UPDATEINIFILE) tem a função de fazer com que o Windows reconheça a modificação nos parâmetros do wallpaper imediatamente; se você passar 0, como você tinha feito, o Windows não fica sabendo que você modificou a configuração, e você teria de se deslogar desse usuário e logar novamente.
E
eliangela
Obrigada, entanglement.
Resolvido meu problema. Esse é o código que eu usei pra redimensionar a imagem
File fileImg = new File("arquivo.JPG");
Dimension dimOriginal = Toolkit.getDefaultToolkit().getScreenSize();
BufferedImage image = ImageIO.read(fileImg);
int newWidth = dimOriginal.width, newHeight = dimOriginal.height;
BufferedImage newImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = newImage.createGraphics();
g.drawImage(image, 0, 0, newWidth, newHeight, null);
File output = new File(IMAGEM_TEMP);
ImageIO.write(newImage, "BMP", output);