PDA

View Full Version : cambio sfondo desktop[c++]


Rsk
24-07-2007, 19:59
sto realizzando un programma in c++ che cambia lo sfondo del desktop.
Non sapendo come fare ho fatto in modo che l'eseguibile creasse un file *.reg che modifica le stringhe del registro riguardanti lo sfondo corrente e imposti il nuovo.
il problema è uno. non so come integrare l'immagine dentro il file exe ed estrarla per impostarla come sfondo.
Potreste spiegarmi bene come fare? Non sono riuscito neanche ad usare le funzioni consiglitemi tampo fa quali FindResource() ecc..
Se avete in mente una soluzione piu' semplice per realizzare questo programma proponetela pure.

Scusate ma il c++ lho iniziato da poco

grazie a tutti coloro che risponderanno

Rsk
26-07-2007, 19:03
help non so come fare.. ci sto sbattendo la testa piu' di una settimana

stdecden
26-07-2007, 21:00
Prova ad inserirlo come array di byte(unsigned char) il file, per esempio

const unsigned char Immagine[] = {1,56,252,53,0,255,...,233};

Per salvare il file poi credo non ci siano problemi:)

Forse per crearti questo array ti converrebbe scrivere un programma che lo faccia da solo

EDIT:
Scusa, piccolo errore di distrazione nel codice

Rsk
28-07-2007, 14:25
Prova ad inserirlo come array di byte(unsigned char) il file, per esempio

const unsigned char Immagine[] = {1,56,252,53,0,255,...,233};

Per salvare il file poi credo non ci siano problemi:)

Forse per crearti questo array ti converrebbe scrivere un programma che lo faccia da solo

EDIT:
Scusa, piccolo errore di distrazione nel codice

ok grazie. ma come ricavo i byte dall'immagine?

stdecden
29-07-2007, 12:39
Puoi scaricarti e installare questo HEX editor:
http://www.mirkes.de/dlshort/97/mpth_18.exe

Poi:
1. Apri il programma
2. Apri il file
3. File->Export->C source code table
4. Rinomina l'array

71104
29-07-2007, 13:30
per impostare lo sfondo del desktop non conviene andare a smanazzare direttamente nel registro perché le chiavi che explorer.exe usa allo scopo potrebbero cambiare in versioni future di Windows. piuttosto è meglio usare la funzione SystemParametersInfo (http://msdn2.microsoft.com/en-us/library/ms724947.aspx) col parametro SPI_SETDESKWALLPAPER.

per inglobare l'immagine nel tuo eseguibile io insisterei sull'uso di LoadResource e compagnia. se non riesci a far funzionare quel codice anzitutto riportalo qui cosicché possiamo vedere se contiene errori, poi vedi di preciso quale funzione fallisce e che errore ritorna la GetLastError.

Rsk
29-07-2007, 13:43
Puoi scaricarti e installare questo HEX editor:
http://www.mirkes.de/dlshort/97/mpth_18.exe

Poi:
1. Apri il programma
2. Apri il file
3. File->Export->C source code table
4. Rinomina l'array

grazie ci sono riuscito!
ma ho un problema.

Ho realizzato questa funzione

int creaFileImg(unsigned char immagine[])
{
ofstream file("img.jpg");
for(int i=0; i<=44161;i++)
{
file<<immagine[i];
}
file.close();
return 0;
}

ma il file contenente l'immagine jpg si vede cosi' http://img409.imageshack.us/img409/3667/imgvy8.jpg

Rsk
30-07-2007, 14:06
per impostare lo sfondo del desktop non conviene andare a smanazzare direttamente nel registro perché le chiavi che explorer.exe usa allo scopo potrebbero cambiare in versioni future di Windows. piuttosto è meglio usare la funzione SystemParametersInfo (http://msdn2.microsoft.com/en-us/library/ms724947.aspx) col parametro SPI_SETDESKWALLPAPER.

per inglobare l'immagine nel tuo eseguibile io insisterei sull'uso di LoadResource e compagnia. se non riesci a far funzionare quel codice anzitutto riportalo qui cosicché possiamo vedere se contiene errori, poi vedi di preciso quale funzione fallisce e che errore ritorna la GetLastError.

sto provando ad usare la funzione SPI_SETDESKWALLPAPER.
con xp funziona solo con bitmap?
se ho il wallpaper nella cartella corrente come dovrei richiamarla la funzione?