CLASSE D'ACCÈS SIMPLE A LA BASE DE REGISTRE POUR VC++ #CORRIGÉE#

Px128 - 13 déc. 2001 à 12:17
MangaII Messages postés 129 Date d'inscription dimanche 9 décembre 2001 Statut Membre Dernière intervention 12 janvier 2009 - 9 août 2007 à 16:04
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/9370-classe-d-acces-simple-a-la-base-de-registre-pour-vc-corrigee

MangaII Messages postés 129 Date d'inscription dimanche 9 décembre 2001 Statut Membre Dernière intervention 12 janvier 2009
9 août 2007 à 16:04
Merci !

Je suis content de voir que ce code sert encore ...
Je ne suis plus dans ma période C, donc, je te crois sur parole Jojo ... :P)

J'espère que ce code reste compatible avec Vista ... j'ai pas testé, mais y'a pas de raison ...

PS : Toujours présent ci besoin !!!!

MangaII
josephrival Messages postés 1 Date d'inscription vendredi 25 août 2006 Statut Membre Dernière intervention 9 août 2007
9 août 2007 à 14:24
Bonjour, super code par contre j'ai modifié les boucles DO-WHILE pour ne pas écrire dans les tableaux s'il n'y a plus de sous-clef ou de valeur. La modification est la suivante :

do
{
Ret =RegEnumKeyEx( Retour,n,NomVal,&NNom,NULL,NULL,NULL,NULL );

if(Ret == ERROR_NO_MORE_ITEMS) break;

strcpy(Tableau[n],NomVal);

n++;
NNom = MaxCar;
} while(n<NMax);

Salutations. Jojo
bachdorches Messages postés 8 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 19 octobre 2005
19 oct. 2005 à 17:15
Salut tout le monde,

C'est vrai que ce code a l'air + que bien, cependant j'ai un peu de mal.
Mon objectif est d'effacer une valeur de la clé HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\run
Pour ça, je pensais énumerer les sous-clés pour les mémoriser, puis lire et mémoriser toutes les valeurs de cette clé (sauf celle que je veux effacer.

Dans un deuxième temps, détruire cette clé puis la recréer avec les infos mémorisées.

Mes bloquages sont :
ATTENTION : LES TABLEAUX DOIVENT ETRES INITIALISES :
=> Comment initialiser ces tableaux
=> Je ne connais pas cette structure **TableauNom (pointeur de pointeur ???)

Voila, Merci à ceux qui voudront bien me répondre
et merci à MangaII.
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
5 oct. 2005 à 11:24
namespace pas très bien géré avec VC6

mais C en effet indiqué.

ds une classe, ça permet en plus d'autres choses, (héritages....)
et ça évite d'avoir tt plein de fonction en global
surtout si un "using" est employé

Kenavo
anonyme_man_in_this_world Messages postés 161 Date d'inscription samedi 25 juin 2005 Statut Membre Dernière intervention 1 août 2006
4 oct. 2005 à 22:19
salut !

une source vraiment superbe mais j'ai la meme remarque que

vecchio56 , pourquoi ne pas utiliser namespace puisqu'il est fait

pour cela ?

en tout cas , merçi pour la source et bonne continuation .
titanchou Messages postés 11 Date d'inscription jeudi 24 février 2005 Statut Membre Dernière intervention 7 août 2009
6 juil. 2005 à 09:26
Merci une fois de plus. Ca marche :)
Donc quelques précision : j'ai changé l'intitulé de tes fonctions, ainsi que les variables car je code toujours en anglais, (habitude) et comme je l'intègre à une appli, je dois ien conserver l'intégrité du code. C'est tout. merci encore
MangaII Messages postés 129 Date d'inscription dimanche 9 décembre 2001 Statut Membre Dernière intervention 12 janvier 2009
1 juil. 2005 à 18:11
salut !

Tout d'abord, je ne comprend pas bien pourkoi tu as changé l'intitulé de mes fonctions !!! tu préfère les avoir en anglais ???

Pour ce qui est des arguments sur les tailles, ce sont les tailles Max ! ex: si tu met 255, la fonction retournera max 255 caractère - Si par malheur la valeur en contient plus, ben tu perds le reste ! Rare sont les valeurs qui contiennent plus !
Le tout est de prévoir ce que tu ve récup !!!
Pour la fonction avec le tableau (**Tableau), c'est un tableau de caractère à 2 dimensions que tu dois initialiser toi mm !! (ex : char Tab[200][255]; ) et il faut donner les dimensions du tableau dans les valeurs NMax et MaxCar !

A toi d'y mettre des valeurs qui te conviennent !

A+
Nico !
titanchou Messages postés 11 Date d'inscription jeudi 24 février 2005 Statut Membre Dernière intervention 7 août 2009
1 juil. 2005 à 11:06
Re dsl pour le flood :s

Ca a pas passer alors jen ai renvoyé plusieurs :s

Si un admin pouvais effacer tous mes post qui se ressemble sauf le premier et bien sur celui ci meme ^^

merci
titanchou Messages postés 11 Date d'inscription jeudi 24 février 2005 Statut Membre Dernière intervention 7 août 2009
1 juil. 2005 à 10:19
Merci Nico,

La déclaration est maintenant ok. C'était l'ordre des include qui n'étais pas bon. Ta classe me permet donc de faire ce que je veux. Mais j'ai encore quelques problèmes :

- Comment trouver la taille de la valeur à récupérée ? Il faut bien lire la valeur une fois pour en connaitre sa taille, et pour lire une clé, il faut spécifier la taille si l'on veux la récupérée. Comment faire ?

C'est pas pas compréhensible, mais j'ai du mal à l'expliquer.

memory->EnumKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\YYY", tKeys, ????);
memory->ReadText(HKEY_LOCAL_MACHINE, "SOFTWARE\\XXX\\YYY\\ZZZ", pathValue, &pathDeliaApplication, ????);

*???? : les paramètres manquant par faute d'ignorance :p

Merci d'avance :)
MangaII Messages postés 129 Date d'inscription dimanche 9 décembre 2001 Statut Membre Dernière intervention 12 janvier 2009
30 juin 2005 à 21:00
Salut !
Les variables HKEY sont définies dans les librairies MFC ! (c'est d'ailleur mentionné dans le fichier .h de ma source)
Si tu n'utilise pas les MFC, il faut soit trouver le moyen de les redéclarer, soit d'inclure le .h qui les déclare dans les MFC !
Pour infos, voila la page de doc MSDN qui correspond à une des fonctions que j'utilise !

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcedata5/html/wce50lrfregopenkeyex.asp

A partir de là , tu peu voir qu'il utilisent directement les valeurs HKEY_CURRENT_USER par exemple ! Si tu ne peut pas les appeler depuis ton programme, il faut les redéfinir !!! mais là j'ai pas de koi te le faire sous la main ! Si vraiment tu trouve pas de solutions, je m'y pencherai ... Faut que je réinstalle VC++ !

Tant que j'y pense fait une recherche dans les fichier .h fournis avec VC++, pour trouver la définition de ces variables ! Avec un peu de chance tu pourra trouver leur définitions et les valeurs qui vont bien pour faire fonctionner le tout !!!

A+
Nico
titanchou Messages postés 11 Date d'inscription jeudi 24 février 2005 Statut Membre Dernière intervention 7 août 2009
30 juin 2005 à 15:26
Bonjour, je suis coincé avec ce morceau de code.
Je commence le C, et j'ai besoin de pouvoir récupérer des clé dans la base de registre pour une appli. Ta classe est simpas, je n'ai repris que la partie lecture d'un text et afficher toutes les sous-clés d'une clé.

Je l'insère dans mon code, avec declaration tout bien. mais j'ai quelques petits problèmes :

d:\dev\monitor\monitor\memoryinformation.h(13) : error C2061: syntax error : identifier 'HKEY'
d:\dev\monitor\monitor\memoryinformation.h(14) : error C2061: syntax error : identifier 'HKEY'

je ne met que celle la, car les autres à mon avis en découlent.
Pour info je suis partis d'un prj entièrement vide. Pas de MFC pour l'instant.

Merci de répondre le plus vite possible :)
cs_NeoUmbrella Messages postés 104 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 11 septembre 2008
22 févr. 2005 à 12:49
Merci pour ton aide MangaII.
En effet, j'utilise Visual C++ comme compilateur mais sans les MFC.
Le type de projet est win32 mode console.
Je vais donc essayer en supprimant les lignes que tu mentionnes.

Merci
MangaII Messages postés 129 Date d'inscription dimanche 9 décembre 2001 Statut Membre Dernière intervention 12 janvier 2009
22 févr. 2005 à 08:48
le fichier stdafx.h ne sert que si tu utilise Visual C++ ! et dans ce cas, c'est VC++ qui le créé lorsque tu créé un nouveau projet !

Si tu n'es pas sous VC++ ni en MFC, il te suffit de créer une nouvelle classe vide et de copier/coller mon code dedans (.h et .cpp) ! Lors du copier coller, il te faut alors supprimer les premieres lignes des fichiers ou se trouvent justement le stdafx.h et les supers codes à ralonges. :

a supprimer dans le .h :

#if !defined(AFX_REGISTREUTIL_H__3DE9C219_2936_439A_B8B3_8EE99A390573__INCLUDED_)
#define AFX_REGISTREUTIL_H__3DE9C219_2936_439A_B8B3_8EE99A390573__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
.
.
.
.
#endif // !defined(AFX_REGISTREUTIL_H__3DE9C219_2936_439A_B8B3_8EE99A390573__INCLUDED_)


rien à enlever dans le CPP !

Si tu est sous VC++ et en MFC, alors créé juste une classe vide ( il va te créer les quelques lignes ci dessus ), il ne reste plus qu'a copier/coller le reste !

Bonne chance !
Si tu n'y arrive tjs pas, indique moi le compilateur que tu utilise, et le type de projet !

A+
cs_NeoUmbrella Messages postés 104 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 11 septembre 2008
22 févr. 2005 à 03:02
Salut, ton code m'ineteresse mais il me manque l'include stdafx.h, pourrais tu me dire ou je peux le trouver ?

Merci
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 août 2004 à 16:21
Justement, les namespace sont faits pour cela
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
16 août 2004 à 11:26
cette classe se comporte comme un namespace, C un ensemble logique de fonction regroupées...

une classe virtuelle, n'ayant js d'instances....

(C idem pr ma classe BVisuel ... ou BFichierIni)
par ex pr BFichierIni, il peut y avoir une instance, mé si on fait un seul appel, autant passer par un appel de la fonc statique: ça évite de créer un obj...


++
Nono.
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 août 2004 à 18:19
Il faudra m'expliquer l'intérêt de faire une classe ne contenant que des fonction statiques. Moi quand on me dit classe, je pense a classe d'objets.
teknophil> Il faut inclure <windows.h>, le reste est OK
MangaII Messages postés 129 Date d'inscription dimanche 9 décembre 2001 Statut Membre Dernière intervention 12 janvier 2009
25 juin 2004 à 08:42
salut !
c'est tout a fait normal, car dans un projet console, il n'y a pas les inclusions windows (enfin, presque pas) !
Pour pouvoir utiliser cette classe il faut au moins inclure :
#include <winreg.h>

et aussi dans les options du projet rajouter la librairie advapi32.lib

Avec tout ca, ca pourrai marcher, mais je garanti rien ... j'ai pas essayé !
A+
cs_teknophil Messages postés 3 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 22 juin 2004
22 juin 2004 à 11:25
J'ai créé un win32 console application
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
22 juin 2004 à 10:03
Quel type de prj tu a créé?
Un MFC app wizard ???

si C bien le cas, verifie les inclusions...

Ciao
Nono.
cs_teknophil Messages postés 3 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 22 juin 2004
21 juin 2004 à 21:22
salut ,
j'ai quelque problème, j'utilise VC++ et en compilant j'obtien plein d'erreur de ce type :
d:\program files\microsoft visual studio\myprojects\test_regedit\registreutil.h(30) : error C2061: syntax error : identifier 'HKEY'
a mon avis j'ai du oublier quelque chose mais je ne sais pas quoi .
Si quelqu'un a une solution merci .
albert0 Messages postés 249 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 9 août 2008
5 mai 2004 à 17:56
ok c'est parfait.. merci
MangaII Messages postés 129 Date d'inscription dimanche 9 décembre 2001 Statut Membre Dernière intervention 12 janvier 2009
5 mai 2004 à 12:53
salut !
rien de plus simple !

tu inclus dans ton projet les fichier fournis, puis tu fait un #include "RegistreUtil.h"

ensuite, il te suffit d'appeler la fonction qui va bien :

char tmp[50];

CRegistreUtil::LitTexte( HKEY_CURRENT_USER, "Software\\xXx\\Blala\\Keys", "keys4", tmp, 50);

et c'est tout !!!

si par contre, c'est une valeur numérique que tu ve lire, utilise LitNombre !

Voilà !
pas plus compliqué
albert0 Messages postés 249 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 9 août 2008
4 mai 2004 à 21:10
Quelqu'un peu me donnnr un example, pour lire une clé et la stocké dans une variable`?

par ex e veu lire la clé keys4 ki se trouve dans

HKCU\Software\xXx\Blala\Keys\


?

thx
albert0 Messages postés 249 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 9 août 2008
4 mai 2004 à 21:10
Quelqu'un peu me donnnr un example, pour lire une clé et la stocké dans une variable`?

par ex e veu lire la clé keys4 ki se trouve dans

HKCU\Software\xXx\Blala\Keys\


?

thx
BarthOlivier Messages postés 132 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 27 novembre 2012 1
17 déc. 2003 à 21:29
Réssaye, apparament j'ai aucun prob......
cs_jand Messages postés 1 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 17 décembre 2003
17 déc. 2003 à 21:14
impossible de telecharger ces sources
CLASSE D'ACCÈS SIMPLE A LA BASE DE REGISTRE POUR VC++ #CORRIGÉE# !!!!
MangaII Messages postés 129 Date d'inscription dimanche 9 décembre 2001 Statut Membre Dernière intervention 12 janvier 2009
1 déc. 2003 à 10:04
Salut Magic_Nono !
A priori, tu as bien modifié mon code ! mais je te rassure il est là pour ca !
Tu peut te dire que j'ai pas fait gd chose, mm pas de gestion d'erreur, ni rien, mais mon but était de créer un classe la plus simple possible, juste pour lire et écrire des valeurs simple dans la base !
Le but n'était pas d'en faire un outils super puissant ! mais libre à chacun de le modifier. A l'occasion, j'en ferai peut-être une beaucoup plus sérieuse, mais ces temps ci, je code pas bcp !

Pour ton PB, ce qui à l'aire de te déranger, c'est les multi string ! séparées par des 0 et terminée par 00 !
Le PB est de savoir comment tu veut retourner cette valeur ! Si tu veu conserver toutes les chaines distinctes ou les regrouper en 1 seule.

A mon avis, le plus simple est de les regrouper ! Pour celà, pas la peine de s'embêter, il suffit de remplacer tous les 0 orphelins par un autre caractère ( ex espace, ou un caractère inutilisable genre 255)

Pour celà, une simple boucle :

for (int i=0;i< (NVal-1) ;i++)
if ( (valeur[i] == 0) && (valeur[i+1] != 0) )
valeur[i] = 32; // ou n'importe kel caractère au choix !

Ce qui te donne pour résultat une chaine de caractère contenant plusieurs sous chaines séparées par le caractère que tu as remplacé ! et toujours terminée par 00 !
Le (NVal-1) sers à ne pas prendre en compte le dernier 0

Voilà ! je pense que c'est le plus simple !

Si au contraire, tu veu séparer tes chaines dans des variables différentes, c'est un peu plus compliqué ! et le PB, c'est de les classer dans le tableau !!!!!

A+
Nico
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
29 nov. 2003 à 13:40
Bonjour les amich!!

Ta classe est excellente, je cherchais ça depuis lgt et c'est la seule que j'ai trouvé de vraiement satisfaisante...

J'ai essayé de l'augmenter mais G eu un ptt soucis:
pour la recupération d'info REG_MULTI_SZ & REG_MULTI_SZ


voici donc comment G modifié enumVal
(rq :
les BString peuvent être considérées comme des CString
& Je communiquerai les sources complètes dès que ce pb sera réglé...
(avec l'accord de MangaII bien évidement...)
)
Merci à tous ceux qui voudront bien se pencher sur le pb!!!
& @ + Nono.



int BRegistreUtil::enumVal(HKEY HK, char * cle, BLBString* TableNom, BLBString* TableVal, int MaxCar) // Récupères toutes les valeurs d'un clé de la base de registre
{
/// -----------------------------------------------------------------------------------------------------------------------------------------------
/// ---------------- BRegistreUtil::EnumVal(HKEY HK ,char* cle ,char** TableauNom ,char** TableauVal ,int NMax ,int MaxCar) -> int ----------------
/// -----------------------------------------------------------------------------------------------------------------------------------------------
/// ----- Objectif : donner les différentes valeurs de la clef
/// ----- Explic : Cette fonction lit toutes les valeurs d'une même clé (dans la limite de NMax)
/// ----- Auteur(s) : MangaII --/--/02 & 18/11/02 - Bruno CELLE 18/10/03
/// ----- PreCond : les listes ne doivent pas être triées et les doublons doivent être permis
/// ----- PostCond : TODO
/// ----- Etat : .5 (-1<0<1<2)
/// ----- TODO : gérer tout type de donnée
/// -----------------------------------------------------------------------------------------------------------------------------------------------
/// ----- HKEY HK : clef principale de la base de registre (ex : HKEY_CLASSES_ROOT)
/// ----- char* cle : chemin d'accès à la valeur de la base de registre
/// ----- char** TableauNom : nom des données récupérées dans la base
/// ----- char** TableauVal : valeurs des données récupérées dans la base
/// ----- int MaxCar : taille maximum d'une valeur, ainsi que du nom de la valeur
/// -----------------------------------------------------------------------------------------------------------------------------------------------
/// ----- retour (int) : cf.obj
/// -----------------------------------------------------------------------------------------------------------------------------------------------
/// ----- Var Externes à la fonction (cf.partie préc) (6) : HK ,MaxCar ,NMax ,TableauNom ,TableauVal ,cle
/// ----- Var Internes à la fonction (8) : NNom ,NVal ,NomVal ,Ret ,Retour ,Type ,Valeur ,n
/// ----- Var utilisées par adresse (3) : TableauNom ,TableauVal ,char
/// ----- Var In (6) : HK ,MaxCar ,NMax ,TableauNom ,TableauVal ,cle
/// ----- Var In Globales (1) : char
/// ----- Var In Globales Constantes (4) : ERROR_NO_MORE_ITEMS ,KEY_ALL_ACCESS ,REG_DWORD ,REG_NONE

HKEY Retour;
RegOpenKeyEx(HK,cle,0,KEY_ALL_ACCESS,&Retour);
char*NomVal;
NomVal=new char[MaxCar+1];
char*Valeur;
Valeur=new char[MaxCar+1];
unsigned long NNom=MaxCar;
unsigned long NVal=MaxCar;
unsigned long Type=0;
int n=0;
long Ret;
do
{
Ret=RegEnumValue( Retour,n,(char *)NomVal,&NNom,0,&Type,(unsigned char *)Valeur,&NVal );
Valeur[NVal]=0;
/// algo : Type in {0 ~10}
/*
0 REG_NONE No value type
3 REG_BINARY Binary data in any form.
4 REG_DWORD A 32-bit number.
4 REG_DWORD_LITTLE_ENDIAN A 32-bit number in little-endian format. This is equivalent to REG_DWORD.
In little-endian format, a multi-byte value is stored in memory from the lowest byte (the "little end") to the highest byte. For example, the value 0x12345678 is stored as (0x78 0x56 0x34 0x12) in little-endian format.
5 REG_DWORD_BIG_ENDIAN A 32-bit number in big-endian format.
In big-endian format, a multi-byte value is stored in memory from the highest byte (the "big end") to the lowest byte. For example, the value 0x12345678 is stored as (0x12 0x34 0x56 0x78) in big-endian format.
2 REG_EXPAND_SZ A null-terminated string that contains unexpanded references to environment variables (for example, "%PATH%"). It will be a Unicode or ANSI string depending on whether you use the Unicode or ANSI functions.
6 REG_LINK A Unicode symbolic link. Used internally; applications should not use this type.
7 REG_MULTI_SZ An array of null-terminated strings, terminated by two null characters.
8 REG_NONE No defined value type.
2 REG_RESOURCE_LIST A device-driver resource list.
1 REG_SZ A null-terminated string. It will be a Unicode or ANSI string, depending on whether you use the Unicode or ANSI functions.

9 REG_FULL_RESOURCE_DESCRIPTOR // Resource list in the hardware description
10 REG_RESOURCE_REQUIREMENTS_LIST */
if(Type!=REG_NONE)
{
BString plomp;
if(Type!=REG_MULTI_SZ)
plomp=NomVal;
else
plomp="REG_MULTI_SZ ????";
*TableNom+=plomp;
}

switch(Type)
{
case REG_NONE: //0 No value type
break;
case REG_DWORD: //4 A 32-bit number.
// case REG_DWORD_LITTLE_ENDIAN:// 4 A 32-bit number in little-endian format. This is equivalent to REG_DWORD.
//strcpy(TableauNom[n],NomVal);
{
// In little-endian format, a multi-byte value is stored in memory from the lowest byte (the "little end") to the highest byte. For example, the value 0x12345678 is stored as (0x78 0x56 0x34 0x12) in little-endian format.
BString plomp,nb;
plomp.fromHexa(Valeur[3]); nb =plomp;
plomp.fromHexa(Valeur[2]); nb+=plomp;
plomp.fromHexa(Valeur[1]); nb+=plomp;
plomp.fromHexa(Valeur[0]); nb+=plomp;
nb+='h';
*TableVal+=nb;
}
break;
case REG_DWORD_BIG_ENDIAN: //5 A 32-bit number in big-endian format.
//strcpy(TableauNom[n],NomVal);
{
// In big-endian format, a multi-byte value is stored in memory from the highest byte (the "big end") to the lowest byte. For example, the value 0x12345678 is stored as (0x12 0x34 0x56 0x78) in big-endian format.
BString plomp,nb;
plomp.fromHexa(Valeur[0]); nb =plomp;
plomp.fromHexa(Valeur[1]); nb+=plomp;
plomp.fromHexa(Valeur[2]); nb+=plomp;
plomp.fromHexa(Valeur[3]); nb+=plomp;
nb+='h';
*TableVal+=nb;
}
break;
case REG_SZ: //1 A null-terminated string. It will be a Unicode or ANSI string, depending on whether you use the Unicode or ANSI functions.
case REG_EXPAND_SZ: //2 A null-terminated string that contains unexpanded references to environment variables (for example, "%PATH%"). It will be a Unicode or ANSI string depending on whether you use the Unicode or ANSI functions.
//2 REG_RESOURCE_LIST A device-driver resource list.
*TableVal+=Valeur;
break;
case REG_BINARY: //3 Binary data in any form.
{
BString chaine="",plomp;
unsigned long i,d;
for(i=0;i<NVal;i++)
{
d=Valeur[i];

plomp.fromHexa(d);
chaine+=plomp;
chaine+=' ';
}
*TableVal+=chaine;
}
break;
case REG_MULTI_SZ: //7 An array of null-terminated strings, terminated by two null characters.
/* {
BString chaine="",plomp;
unsigned long i=0;
char c;
while(i<NVal&& Valeur[i]==0 && Valeur[i+1]==0)
{
plomp=Valeur;
i+=plomp.getLength();
chaine+=plomp;
chaine+='
';
}
*TableVal+=chaine;
}
*/
*TableVal+="??????";
break;
default:
/*
6 REG_LINK A Unicode symbolic link. Used internally; applications should not use this type.
8 REG_NONE No defined value type.
9 REG_FULL_RESOURCE_DESCRIPTOR // Resource list in the hardware description
10 REG_RESOURCE_REQUIREMENTS_LIST ( 10 )
*/
//strcpy(TableauVal[n],Valeur);
*TableVal+="????";//Valeur;
}
n++;
NNom=MaxCar;
NVal=MaxCar;
Type=0;
}
while( Ret != ERROR_NO_MORE_ITEMS);
RegCloseKey(Retour);
delete Valeur;
delete NomVal;
return n-1;
}
cs_Carnage Messages postés 31 Date d'inscription dimanche 25 août 2002 Statut Membre Dernière intervention 1 février 2008
30 oct. 2003 à 01:51
Juste un petit conseil en passant par la :
étant donnée que tu utilises que des fonctions statics, il est inutile de creer une classe, un espace de nom est bien plus adapté.
En utilisant les espaces de nom, les fonctions seront appelé de la même facon. On les définit comme sa :
namespace RegistreUtil {
int CreerCle(HKEY HK, char * cle);
}
t as rien a changer dans ton fichier cpp, si ce n'est enlever le C au nom, vu que ca n'est plus une classe.
voila
byebye
BarthOlivier Messages postés 132 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 27 novembre 2012 1
17 oct. 2003 à 23:28
Merci
clair, net, precis...
Que du bon
MangaII Messages postés 129 Date d'inscription dimanche 9 décembre 2001 Statut Membre Dernière intervention 12 janvier 2009
18 nov. 2002 à 11:35
########## VOILA #### C Corrigé #######
Bon, je vien de modifier la source, et de corriger le petit BUG qui apparaissait sous WIN 95 et 98 !!!
maintenant, y'a plus de PB !!!!
Pour ceux qui l'utilisent déjà, attention, y'a la déclaration d'1 fonction qui a été modifiée !!! c a peu près tout !!!

a+
NICO !
MangaII Messages postés 129 Date d'inscription dimanche 9 décembre 2001 Statut Membre Dernière intervention 12 janvier 2009
16 sept. 2002 à 15:28
petite info !!!
cette classe fonctionne très bien sur des systèmes NT, 2000 et XP, mais sous win 95 ou 98, il y a une toute petite modification de code a effectuer !!!!
je donnerai plus de détails si qqun en veut !!!

a+
NICO
pokop Messages postés 1 Date d'inscription mardi 17 juillet 2001 Statut Membre Dernière intervention 17 décembre 2001
17 déc. 2001 à 12:03
Je cherche de la doc sur comment ca marche la base de registre.

quelqu'un peut me renseigné ???
Exact ! y'a pas de sécurité sur la destruction des clé ! mais tu ne peux qd mm pas supprimer n'improte quoi ! y'a des clés protégées que tu pe pas détruire !
Mais le but, a l'origine, est de pas s'emmerder avec des droits, des types, et des sécurités ! et pour ca, c efficace !

Petit conseils a tous, avant de tripoter la base de registre, faites des sauvegardes, et essayés de comprendre ce que vous faites !
A+
Super ça marche :)
Mais surtout, attention à ne pas faire :
DetruitCle ( HKEY_CLASSES_ROOT, "" );

Parce vous perdez l'ensemble de HKEY_CLASSES_ROOT et là il vous faudra restaurer une sauvegarde :(

Heu... Non non, je n'ai jamais fait ça moi :)