Le registre facile (vc++ sans mfc)

Soyez le premier à donner votre avis sur cette source.

Vue 11 473 fois - Téléchargée 1 431 fois

Description

Voici une classe permattant une gestion quasi-totale du registre!
La plupart de celle deja presente sur le site présente des defaut, tel que la limite dans la saisie et la lecture des clés registres. Ce qui a pour effet de faire planter les prog utilisant ces classes.
Ainsi celle que je vous presente qui malgré tout n'est pas complete, ne presente plus ces limites, et en plus est en francais :p
Une gestion des erreurs a été incluse a la classe ! Pour ceux qui ne voudrait pas se servir de la gestion automatique des erreurs, une option permet de la désactiver pour une gestion personnalisée...

SheLL

Source / Exemple :


/****

  • Class : Registre
  • Auteur: Shell
  • Date : 24/08/2004
  • Commentaires : Cette page de code contient la "class" permettant l'edition de la base de registre
      • /
#include "RegistreErreur.h" class Registre { int returnValue; DWORD dwLen; LPBYTE dwKeyEn; HKEY ChoisirBase(char *base); unsigned long ChoisirType(char *type); public: Registre(); ~Registre(); bool GestionErreur; bool OuvrirCle(char *base, char *chemin, HKEY *hCle); char *LireValeur(HKEY hCle, char *nom, bool *OpRes); bool EcrireValeur(HKEY hCle, char *nom, char *valeur, char *type); bool CreerCle(char *base, char *chemin, HKEY *hCle); bool SupprimerCle(char *base, char *chemin); bool SupprimerValeur(char *base, char *chemin, char *nom); bool FermerCle(HKEY hCle); }; Registre::Registre() { dwKeyEn = NULL; dwLen = 0; } Registre::~Registre() { delete dwKeyEn; } HKEY Registre::ChoisirBase(char *base) { HKEY tBase=0; if(strcmp(base,"HKEY_CURRENT_USER")==0) tBase = HKEY_CURRENT_USER; else if(strcmp(base,"HKEY_USERS")==0) tBase = HKEY_USERS; else if(strcmp(base,"HKEY_LOCAL_MACHINE")==0) tBase = HKEY_LOCAL_MACHINE; else if(strcmp(base,"HKEY_CURRENT_CONFIG")==0) tBase = HKEY_CURRENT_CONFIG; else if(strcmp(base,"HKEY_CLASSES_ROOT")==0) tBase = HKEY_CLASSES_ROOT; return tBase; } unsigned long Registre::ChoisirType(char *type) { unsigned long hResType=0; if(strcmp(type,"REG_NONE")==0) hResType = REG_NONE; else if(strcmp(type,"REG_SZ")==0) hResType = REG_SZ; else if(strcmp(type,"REG_BINARY")==0) hResType = REG_BINARY; else if(strcmp(type,"REG_DWORD")==0) hResType = REG_DWORD; else if(strcmp(type,"REG_DWORD_BIG_ENDIAN")==0) hResType = REG_DWORD_BIG_ENDIAN; else if(strcmp(type,"REG_LINK")==0) hResType = REG_LINK; else if(strcmp(type,"REG_MULTI_SZ")==0) hResType = REG_MULTI_SZ; return hResType; } bool Registre::OuvrirCle(char *base, char *chemin, HKEY *hCle) { HKEY hTempCle=0; //Ouvre la clef ou se trouve la valeur returnValue = RegOpenKey(ChoisirBase(base), chemin, &hTempCle); if (returnValue != ERROR_SUCCESS) { if(GestionErreur) OnRegError(ERR_CLECHEMIN); return false; }
  • hCle = hTempCle;
return true; } char *Registre::LireValeur(HKEY hCle, char *nom, bool *OpRes) { //On recupere la taille de la clé dans un premier temps pour connaitre la taille du buffer que l'on va devoir spécifié returnValue = RegQueryValueEx(hCle, nom, NULL, NULL, NULL, &dwLen); //On alloue la taille nécéssaire pour éviter les dépassement de caaciter qui risqueraient décrassé d'aure varaible de la mémoire dwKeyEn = new BYTE[dwLen]; //Maintenant on lit la valeur de la clé en spécifiant la taille du buffer returnValue = RegQueryValueEx(hCle, nom, NULL, NULL, dwKeyEn, &dwLen); if(returnValue != ERROR_SUCCESS) {
  • OpRes = false;
if(GestionErreur) OnRegError(ERR_NOM); return "Erreur!"; }
  • OpRes = true;
return (char*)dwKeyEn; //on retourne le résultat a l'aide d'un CAST } bool Registre::EcrireValeur(HKEY hCle, char *nom, char *valeur, char *type) { returnValue = RegSetValueEx(hCle,nom,NULL,ChoisirType(type),(PBYTE)valeur,strlen(valeur)); if(returnValue != ERROR_SUCCESS) { if(GestionErreur) OnRegError(ERR_ECRIRE); return false; } return true; } bool Registre::CreerCle(char *base, char *chemin, HKEY *hCle) { HKEY hTempCle=0; returnValue = RegCreateKey(ChoisirBase(base),chemin,&hTempCle); if(returnValue != ERROR_SUCCESS) { if(GestionErreur) OnRegError(ERR_CREERCLE); return false; }
  • hCle = hTempCle;
return true; } bool Registre::SupprimerCle(char *base, char *chemin) { returnValue = RegDeleteKey(ChoisirBase(base),chemin); if(returnValue != ERROR_SUCCESS) { if(GestionErreur) OnRegError(ERR_SUPRCLE); return false; } return true; } bool Registre::SupprimerValeur(char *base, char *chemin, char *nom) { HKEY hTempCle=0; if(!OuvrirCle(base,chemin,&hTempCle)) return false; returnValue = RegDeleteValue(hTempCle,nom); if(returnValue != ERROR_SUCCESS) { if(GestionErreur) OnRegError(ERR_SUPRVAL); return false; } return true; } bool Registre::FermerCle(HKEY hCle) { returnValue = RegCloseKey(hCle); if(returnValue != ERROR_SUCCESS) { if(GestionErreur) OnRegError(ERR_FERMER); return false; } return true; }

Conclusion :


Voili voilou pour ce qui est du code .... la gestion des erreurs est dans un header independant.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
5
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
11 septembre 2006

pardon j'ai oublié de préciser que si je rentre 0x00
il m'affiche dans le registre en hexadécimal: 30307830
Messages postés
5
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
11 septembre 2006

Bon voilà ton code est super mais quand je l'ai testé, j'ai eu des interrogations:
j'ai créé une valeur DWORD mais dans le champ valeur j'ai mis la valeur : 0x00000001 qui correspond en décimal à 1 mais cela ne marche pas, par contre si je mets 0xFF là cela marche et je ne comprends pas pourquoi, quelqu'un pourrait -il m'expliquer le fonctionnement, c'est une valeur en binaire, hexadécimal, décimal...
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
ça c'est de la soluce !

ferme les yeux, tu auras moins peur
lol
Messages postés
43
Date d'inscription
vendredi 27 décembre 2002
Statut
Membre
Dernière intervention
15 février 2006

ok merci, pour le bug j'ai trouvé, il suffit de desactiver la gestion des erreures
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
utilise donc les MFC

tu te compliqueras moins la vie...

après, si tu as du tps à y consacrer....

++
Afficher les 12 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.