[C++] base de registre; Wallpaper

Résolu
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Voilà, j'ai le programme suivant, que j'ai en grande partie récupérer sur un site. Ce programme est sensé changé le fond d'écran de XP. Le problème c'est qu'il ne fonctionne pâs.
Pourtant, en allant dans les propriété d'affichage il semble bien mis à jour...
Donc, si vous pouviez m'aider.
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
//#include "project1.h"
#include <time.h>

#define CA_FOIRE 0
#define C_BON 1


class Programme
{
HINSTANCE Hinst;
LPSTR NomFic;
public:
Programme(HINSTANCE);
BOOL ChargeAleatoire();
BOOL RemplaceRegistre();
int Msg( LPSTR fmt, ... );
};

Programme *CProg;

int WINAPI WinMain(HINSTANCE, HINSTANCE Hinst, LPSTR, int)
{
BOOL Err=FALSE;

CProg = new Programme (Hinst);
CProg->ChargeAleatoire();
CProg->RemplaceRegistre();

delete(CProg);
return Err;
}

Programme :: Programme (HINSTANCE Hinstance)
{
Hinst=Hinstance;
NomFic=(LPSTR) malloc(100);
return;
}

BOOL Programme :: ChargeAleatoire(void)
{
int a,i,Nb_Fonds;
time_t tim;
char Buffer[512];
FILE *f=fopen(".\\index.dat","rt");

if (!f) return CA_FOIRE;

fscanf(f,"%d",&Nb_Fonds);printf("il y a  %d fichiers\n",Nb_Fonds);

// fct aléatoire artisanale
// juste pour le fun
a = (int) time(&tim);
a%=Nb_Fonds;
a++;

for (i=0;i<a;i++)
{
fscanf(f,"%s",Buffer);
if (feof(f)) return CA_FOIRE;
}
strcpy(NomFic,Buffer);
printf("nomfic : %s",Buffer);
return C_BON;
}

BOOL Programme :: RemplaceRegistre(void)
{
HKEY hSoftKey,hCompanyKey;
DWORD dw;

RegOpenKeyEx(HKEY_CURRENT_USER, "Control Panel\\Desktop", 0, KEY_WRITE|KEY_READ,
&hSoftKey);
RegSetValueEx(hSoftKey,"WallPaper", NULL, REG_SZ,
(LPBYTE)NomFic, strlen(NomFic)*sizeof(char));//(5+1)*sizeof(TCHAR));
RegCloseKey(hSoftKey);

return C_BON;
}

int Programme :: Msg( LPSTR fmt, ... )
{
char buff[256];
va_list va;

va_start(va, fmt);
wvsprintf(buff, fmt, va);
va_end(va);
lstrcat(buff, "\r\n");

MessageBox( NULL, buff, "Ced Message", MB_OK );

return C_BON;
}


///////////////////////////////////////////////
/// index.dat
/// 2
/// c:\blabla\fonds\image1.bmp
/// c:\blabla\fonds\image2.bmp
// et ainsi de suite ...
/////////////////////////////////////////////// 

A voir également:

7 réponses

kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Salut Char,

Cette fonction est directe pour changer l'arrière plan. Elle force windows la mise à jour de l'arrière plan (et j'imagine que pour la mémoriser il la place aussi dans la base)
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, cheminVersFichier, 0)

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-systemparametersinfoa?redirectedfrom=MSDN
0
niels
 
Ce code est vraiment n'importe quoi.
On ne copie*** jamais *** ce qu'on trouve sur les sites !
Il n'y a que des aneries, forcément
Pour les 2 méthodes officeilles, demander chez les pros :
news://194.177.96.26/fr.comp.os.ms-windows.programmation
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Ben essaie mon truc, on verra si ça marche pas :-)
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Merci.
Niel, je vais suivre ton conseil, je ne vais pas recopié le lien que tu donnes.
Merci Killian, je testerai ça dès que possible. Pour utiliser ta onction, je suppose que je remplace toutes mes fonctions Reg..., et ça devrais aller.
Par contre, dans ton lien, il y a :
The pvParam parameter can specify a .jpg file.

    Windows Server 2003 and Windows XP/2000:  The pvParam parameter cannot specify a .jpg file.
Je trouve étonnant de ne pas pouvoir spécifier un .jpg avec XP, alors qu'il se supporte plutôt bien comparé à 98. Si tu as une réponse sur cette remarque de Microsoft, elle est la bien venu, mais je testerai avec un .jpg pour être sur.
0
freddy
 
On peut mettre des jpeg, mais pas comme ça.
Comme dit, voir chez les pros de fr.comp.os.ms-windows.programmation
ou tout a été expliqué en long, large et travers depuis... des dizaines d'années.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Puisque tu me le conseil, j'ai essayé d'aller voir. Mais je n'arrive même pas à trouver le site...
Quand je met l'adresse, soit il ne trouve rien soit il ouvre outlook (!)
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention  
 
C'est un newsgroup, il te faut un client de messagerie pour y accéder (et il faut aussi que ton FAI
te procure un serveur nntp, ça se fait de moins en moins).

Note qu'il est vrai que les newsgroups sont réputés pour heberger des spécialistes. Notamment les comp.os et consoeurs. Ceci dit j'aime pas trop la mentalité d'arriver sur un forum et de dire: ici c'est nul, allez voir chez les pros. Est ce que moi je viens chez vous en crachant sur vos tapis et en pérorant que le voisin fait du meilleur café?

De toutes façons on y gagne autant à chercher par nous même...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Lol, le site de pro ^^. No comment.
Sinon Char Snipeur,
Teste :
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, cheminVersFichier, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);

Je te promets rien, j'ai pas testé ^^.
Cdlt
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Merci pour vos réponse. Après quelques recherches, j'ai trouvé par l'intermédiaire du newsgroup (https://groups.google.com/forum/#!forum/fr.comp.os.ms-windows.programmation :
http://glkake.free.fr/wallpaperchange/
Qui donne un fichier source qui doit fonctionner. Dans le cas d'un jpg, en fait le gars le transforme en bmp et le copie dans WINDIR. Et la fonction SystemParametersInfo() pour finir. Je teste, si ça fonctionne je met résolu, sinon, de nouvelles questions.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
J'en ai chier avec tout leur librairie, mais ça fonctionne !
Merci à tous.
0