Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

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


Information sur la source

Catégorie :API Niveau : Initié Date de création : 09/12/2001 Date de mise à jour : 18/11/2002 11:29:24 Vu / téléchargé: 6 883 / 1 191

Note :
9,8 / 10 - par 5 personnes
9,80 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (34)
Ajouter un commentaire et/ou une note

Description

Cette classe propose des fonction simples (avec juste les paramêtres nécessaires pour lire et écrire dans la base de registre).
Pour l'utiliser, il suffit d'ajouter le fichier .h et .cpp a vos sources, faire un
#include RegistreUtil.h
puis, vous pouvez utiliser les fonctions, sans déclarer d'occurences a la classe (car fonction statiques), que vous utilisez com suit :
CRegistreUtil::"fonction"( ... ) ;

et voilà !
tous l'indispensable pour utiliser la base de registre !  

####################################################
           ATTENTION
####################################################
jusqu'a présent un BUG existait lors de l'utilisation sous WIN 95 et 98 !
La correction est maintenant effectuée (le 18-11-02)
ca représent pas gd chose ! juste la redéfinition de la fonction LitTexte (1 param en plus) et une initialisation en plus dans LitNombre !

Voilà ! j'espère que maintenant tout le monde pourra l'utiliser !

si des PB persistes, prévenez moi !!!

 

Source

  • Voilà les fonctions déclarées :
  • static int CreerCle(HKEY HK, char * cle);
  • static int DetruitCle(HKEY HK, char * cle);
  • static int EcrireTexte(HKEY HK, char * cle, char * nom, char * valeur);
  • static int EcrireNombre(HKEY HK, char * cle, char * nom, long valeur);
  • static int LitTexte(HKEY HK, char * cle, char * nom, char * valeur, unsigned long taille);
  • static int LitNombre(HKEY HK, char * cle, char * nom, long *valeur);
  • static int EnumVal(HKEY HK, char * cle, char **TableauNom, char ** TableauVal, int NMax ,int MaxCar);
  • static int EnumCle(HKEY HK, char *cle, char **Tableau,int NMax,int MaxCar);
  • Le tout dans le fichier ZIP !
Voilà les fonctions déclarées :

static int CreerCle(HKEY HK, char * cle); 
static int DetruitCle(HKEY HK, char * cle);
static int EcrireTexte(HKEY HK, char * cle, char * nom, char * valeur);
static int EcrireNombre(HKEY HK, char * cle, char * nom, long valeur);
static int LitTexte(HKEY HK, char * cle, char * nom, char * valeur, unsigned long taille);
static int LitNombre(HKEY HK, char * cle, char * nom, long *valeur);
static int EnumVal(HKEY HK, char * cle, char **TableauNom, char ** TableauVal, int NMax ,int MaxCar);
static int EnumCle(HKEY HK, char *cle, char **Tableau,int NMax,int MaxCar);


Le tout dans le fichier ZIP !   

Conclusion

Les fonction EnumCle et EnumVal, permettent de lister le contenu complet d'une clé de la base de registre !

télécharge le fichier ZIP et amuse toi bien !  
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de pokop le 17/12/2001 12:03:39

Je cherche de la doc sur comment ca marche la base de registre.

quelqu'un peut me renseigné ???

signaler à un administrateur
Commentaire de MangaII le 16/09/2002 15:28:25

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

signaler à un administrateur
Commentaire de MangaII le 18/11/2002 11:35:59

########## 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 !

signaler à un administrateur
Commentaire de BarthOlivier le 17/10/2003 23:28:06

Merci
clair, net, precis...
Que du bon

signaler à un administrateur
Commentaire de Carnage le 30/10/2003 01:51:43

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

signaler à un administrateur
Commentaire de magic_Nono le 29/11/2003 13:40:56

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;
}

signaler à un administrateur
Commentaire de MangaII le 01/12/2003 10:04:15

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

signaler à un administrateur
Commentaire de jand le 17/12/2003 21:14:52

impossible de telecharger ces sources
CLASSE D'ACCÈS SIMPLE A LA BASE DE REGISTRE POUR VC++ #CORRIGÉE# !!!!

signaler à un administrateur
Commentaire de BarthOlivier le 17/12/2003 21:29:35

Réssaye, apparament j'ai aucun prob......

signaler à un administrateur
Commentaire de albert0 le 04/05/2004 21:10:45

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

signaler à un administrateur
Commentaire de albert0 le 04/05/2004 21:10:47

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

signaler à un administrateur
Commentaire de MangaII le 05/05/2004 12:53:56

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é

signaler à un administrateur
Commentaire de albert0 le 05/05/2004 17:56:55

ok c'est parfait.. merci

signaler à un administrateur
Commentaire de teknophil le 21/06/2004 21:22:01

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 .

signaler à un administrateur
Commentaire de magic_Nono le 22/06/2004 10:03:18

Quel type de prj tu a créé?
Un MFC app wizard ???

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

Ciao
Nono.

signaler à un administrateur
Commentaire de teknophil le 22/06/2004 11:25:12

J'ai créé un win32 console application

signaler à un administrateur
Commentaire de MangaII le 25/06/2004 08:42:21

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+

signaler à un administrateur
Commentaire de vecchio56 le 13/08/2004 18:19:12 administrateur CS

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

signaler à un administrateur
Commentaire de magic_Nono le 16/08/2004 11:26:28

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.

signaler à un administrateur
Commentaire de vecchio56 le 16/08/2004 16:21:13 administrateur CS

Justement, les namespace sont faits pour cela

signaler à un administrateur
Commentaire de NeoUmbrella le 22/02/2005 03:02:20

Salut, ton code m'ineteresse mais il me manque l'include stdafx.h, pourrais tu me dire ou je peux le trouver ?

Merci

signaler à un administrateur
Commentaire de MangaII le 22/02/2005 08:48:11

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+

signaler à un administrateur
Commentaire de NeoUmbrella le 22/02/2005 12:49:36

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

signaler à un administrateur
Commentaire de titanchou le 30/06/2005 15:26:42

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 :)

signaler à un administrateur
Commentaire de MangaII le 30/06/2005 21:00:04

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

signaler à un administrateur
Commentaire de titanchou le 01/07/2005 10:19:24

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 :)

signaler à un administrateur
Commentaire de titanchou le 01/07/2005 11:06:54

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

signaler à un administrateur
Commentaire de MangaII le 01/07/2005 18:11:17

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 !

signaler à un administrateur
Commentaire de titanchou le 06/07/2005 09:26:36

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

signaler à un administrateur
Commentaire de anonyme_man_in_this_world le 04/10/2005 22:19:06

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 .

signaler à un administrateur
Commentaire de magic_Nono le 05/10/2005 11:24:33

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

signaler à un administrateur
Commentaire de bachdorches le 19/10/2005 17:15:03

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.

signaler à un administrateur
Commentaire de josephrival le 09/08/2007 14:24:36

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

signaler à un administrateur
Commentaire de MangaII le 09/08/2007 16:04:39

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

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,14 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.