// RegistreUtil.cpp: implementation of the CRegistreUtil class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "RegistreUtil.h"
#include <string.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CRegistreUtil::CRegistreUtil()
{
}
CRegistreUtil::~CRegistreUtil()
{
}
int CRegistreUtil::CreerCle (HKEY HK, char * cle) // Créé une clé dans la base de registre
{
//---------------------------------------------------------------------
// créé une clé dans la base de registre !
// Dans la rubrique HK (ex : HKEY_CLASSES_ROOT), et de nom "clé"
// Pour créer des sous-clé, on peu directement taper :
// "cle01\\cle02\\cle03 ...." dans la variable "clé"
// La fonction crée directement les sous clés !
//---------------------------------------------------------------------
SECURITY_ATTRIBUTES SecAtt;
SecAtt.nLength = sizeof (SECURITY_ATTRIBUTES);
SecAtt.lpSecurityDescriptor = NULL;
SecAtt.bInheritHandle = TRUE;
HKEY Retour;
DWORD Action;
RegCreateKeyEx(HK,cle,0,"", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, & SecAtt, &Retour, &Action);
RegCloseKey(Retour);
return 0;
}
int CRegistreUtil::DetruitCle (HKEY HK, char * cle) // Détruire une clé dans la base de registre
{
//------------------------------------------------------------
// Cette fonction détruit une clé dans la base de registre !
// Vous ne pouvez détruir qu'une seule clé a la fois !
// et cette fonction ne détruit pas les sous clés !
//------------------------------------------------------------
RegDeleteKey(HK,cle);
return 0;
}
int CRegistreUtil::EcrireTexte (HKEY HK, char * cle, char * nom, char * valeur) // Ecrit une valeur Texte dans une clé définie
{
//------------------------------------------------------------
// Ecrit une valeur de type chaine de caractère dans la base de registre
// "nom" représente le nom de la valeur
// "valeur" représente la chaine de caractère
//------------------------------------------------------------
SECURITY_ATTRIBUTES SecAtt;
SecAtt.nLength = sizeof (SECURITY_ATTRIBUTES);
SecAtt.lpSecurityDescriptor = NULL;
SecAtt.bInheritHandle = TRUE;
HKEY Retour;
DWORD Action;
RegCreateKeyEx(HK,cle,0,"", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, & SecAtt, &Retour, &Action);
RegSetValueEx(Retour,nom,0,REG_EXPAND_SZ ,(unsigned char *)valeur,strlen(valeur)+1);
RegCloseKey(Retour);
return 0;
}
int CRegistreUtil::EcrireNombre (HKEY HK, char * cle, char * nom, long valeur) // Ecrit une valeur numérique dans la base de registre
{
//------------------------------------------------------------
// Idem EcritTexte, mais la valeur est un nombre
//------------------------------------------------------------
SECURITY_ATTRIBUTES SecAtt;
SecAtt.nLength = sizeof (SECURITY_ATTRIBUTES);
SecAtt.lpSecurityDescriptor = NULL;
SecAtt.bInheritHandle = TRUE;
HKEY Retour;
DWORD Action;
RegCreateKeyEx(HK,cle,0,"", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, & SecAtt, &Retour, &Action);
RegSetValueEx(Retour,nom,0,REG_DWORD,(unsigned char *)&valeur,4);
RegCloseKey(Retour);
return 0;
}
int CRegistreUtil::LitNombre(HKEY HK, char * cle, char * nom, long *valeur) // Lit une valeur numérique dans la base de registre
{
//------------------------------------------------------------
// récupère la valeur (numérique) de la valeur "nom", dans la clé "cle"
//------------------------------------------------------------
HKEY Retour;
RegOpenKeyEx(HK,cle,0,KEY_ALL_ACCESS,&Retour);
unsigned long taille = 4; // initialisation obligatoire pour WIN 95- 98
unsigned long type;
RegQueryValueEx( Retour,nom,NULL,&type,(unsigned char *)valeur,&taille);
RegCloseKey(Retour);
return 0;
}
int CRegistreUtil::LitTexte (HKEY HK, char * cle, char * nom, char * valeur,unsigned long taille) // Lit une valeur alphanumérique dans la base de registre
{
//------------------------------------------------------------
// lit la valeur "nom" dans la clé "cle"
// La valeur est une chaine de caractère
// La variable TAILLE doit contenir la taille du buffer // IMPERATIF sous win 95-98
//------------------------------------------------------------
HKEY Retour;
RegOpenKeyEx(HK,cle,0,KEY_ALL_ACCESS,&Retour);
unsigned long type;
RegQueryValueEx( Retour,nom,NULL,&type,(unsigned char *)valeur,&taille);
RegCloseKey(Retour);
return 0;
}
int CRegistreUtil::EnumVal(HKEY HK, char * cle, char **TableauNom, char **TableauVal, int NMax , int MaxCar) // Récupères toutes les valeurs d'un clé de la base de registre
{
//------------------------------------------------------------
// Cette fonction lit toutes les valeurs d'une même clé (dans la limite de NMax)
// La valeur MaxCar définie la taille maximum d'une valeur, ainsi que du nom de la valeur
//
// Les tableaux, correspondent au donnée récupérée dans la base !
// ATTENTION : LES TABLEAUX DOIVENT ETRES INITIALISES !!!
// leur taille doit être identique, et égale a NMAX,
// et chaque chaine du tableau doit être égale a MaxCar
//------------------------------------------------------------
HKEY Retour;
RegOpenKeyEx(HK,cle,0,KEY_ALL_ACCESS,&Retour);
char * NomVal;
NomVal = new char[MaxCar];
char * Valeur;
Valeur = new char[MaxCar];
unsigned long NNom=MaxCar;
unsigned long NVal=MaxCar;
unsigned long Ty=0;
int n=0;
long Ret;
do
{
Ret =RegEnumValue( Retour,n,(char *)NomVal,&NNom,0,&Ty,(unsigned char *)Valeur,&NVal );
strcpy(TableauNom[n],NomVal);
strcpy(TableauVal[n],Valeur);
n++;
NNom = MaxCar;
NVal = MaxCar;
} while ( (Ret != ERROR_NO_MORE_ITEMS) && (n<NMax) );
RegCloseKey(Retour);
return n-1;
}
int CRegistreUtil::EnumCle(HKEY HK, char *cle, char **Tableau,int NMax,int MaxCar) // Liste toutes les sous-clés d'une même clé
{
//------------------------------------------------------------
// Le tableau doit être initialisé a NMAX, et MaxCar
// NMAX, correspond au nombre maximum de sous clés
// MaxCar est la taille maximum du nom de la sous clé
//------------------------------------------------------------
HKEY Retour;
RegOpenKeyEx(HK,cle,0,KEY_ALL_ACCESS,&Retour);
char * NomVal;
NomVal = new char[MaxCar];
unsigned long NNom=MaxCar;
int n=0;
long Ret;
do
{
Ret =RegEnumKeyEx( Retour,n,NomVal,&NNom,NULL,NULL,NULL,NULL );
strcpy(Tableau[n],NomVal);
n++;
NNom = MaxCar;
} while ( (Ret != ERROR_NO_MORE_ITEMS) && (n<NMax) );
RegCloseKey(Retour);
return n-1;
}