[C++] base de registre; Wallpaper

Résolu
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 ...
/////////////////////////////////////////////// 


--
Salutation !
Char Snipeur
Configuration: Windows XP
Firefox 2.0.0.18

7 réponses

  1. 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
    1. Modérateur
      Ben essaie mon truc, on verra si ça marche pas :-)
      0
  2. Contributeur
    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
    1. 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
      1. Contributeur
        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
      2. Modérateur
        @Char SnipeurC'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
    2. Contributeur
      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
      1. Contributeur
        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
        1. Contributeur
          J'en ai chier avec tout leur librairie, mais ça fonctionne !
          Merci à tous.
          0