Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1308 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Lire dans la base de registre : phénomène étonnant !!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Lire dans la base de registre : phénomène étonnant !!

n°56068
Rebel
Posté le 29-08-2001 à 13:59:57  profilanswer
 

Salut à tous !
 
J'ai de nouveau un ptit problème,  je ne comprends pas un truc, j'ai écrit le code suivant :
 
CDialog::OnInitDialog();
 
 long lResult; //Variable contenant le résultat du  RegQueryValue
 char IP[20]; //Définition de la variable contenant la valeur de la clé
 DWORD dwIPlen=20;
 
 CString IPAddressKey[10] = {"Software\\HubSoft\\IP1","Software\\HubSoft\\IP2",
 "Software\\HubSoft\\IP3","Software\\HubSoft\\IP4",
 "Software\\HubSoft\\IP5","Software\\HubSoft\\IP6",
 "Software\\HubSoft\\IP7","Software\\HubSoft\\IP8",
 "Software\\HubSoft\\IP9","Software\\HubSoft\\IP10"};
 
 CString IPAddressString[10];
 
 for (int i=0; i<10; i++)
 {
         lResult = RegQueryValue(HKEY_LOCAL_MACHINE, IPAddressKey[i], IP, (long*)&dwIPlen);
  IPAddressString[i]=IP;
 }
 
 m_strIPAddress1 = IPAddressString[0];
 m_strIPAddress2 = IPAddressString[1];
 m_strIPAddress3 = IPAddressString[2];
 m_strIPAddress4 = IPAddressString[3];
 m_strIPAddress5 = IPAddressString[4];
 m_strIPAddress6 = IPAddressString[5];
 m_strIPAddress7 = IPAddressString[6];
 m_strIPAddress8 = IPAddressString[7];
 m_strIPAddress9 = IPAddressString[8];
 m_strIPAddress10 = IPAddressString[9];
     
 //On met à jour le champ de chemin
 UpdateData(FALSE);
 
Et j'arrive presque à faire ce que je veux, à savoir, récupérer les valeurs de la base de registre pour les mettre dans le m_strIPAddressX...Tout fonctionne bien, excepté pour la dernière valeur !! A la fin de ce code, m_strIPAddress10 ne contient pas la bonne valeur, mais il contient celle de m_strIPAdress9...Comment cela se fait il ??
 
Merci d'avance à la personne qui pourra m'expliquer celà pour me permettre d'avancer...

mood
Publicité
Posté le 29-08-2001 à 13:59:57  profilanswer
 

n°56105
therier
heu...coucou!
Posté le 29-08-2001 à 16:14:46  profilanswer
 

Rebel a écrit a écrit :

Salut à tous !
 
J'ai de nouveau un ptit problème,  je ne comprends pas un truc, j'ai écrit le code suivant :
 
CDialog::OnInitDialog();
 
 long lResult; //Variable contenant le résultat du  RegQueryValue
 char IP[20]; //Définition de la variable contenant la valeur de la clé
 DWORD dwIPlen=20;
 
 CString IPAddressKey[10] = {"Software\\HubSoft\\IP1","Software\\HubSoft\\IP2",
 "Software\\HubSoft\\IP3","Software\\HubSoft\\IP4",
 "Software\\HubSoft\\IP5","Software\\HubSoft\\IP6",
 "Software\\HubSoft\\IP7","Software\\HubSoft\\IP8",
 "Software\\HubSoft\\IP9","Software\\HubSoft\\IP10"};
 
 CString IPAddressString[10];
 
 for (int i=0; i<10; i++)
 {
         lResult = RegQueryValue(HKEY_LOCAL_MACHINE, IPAddressKey[i], IP, (long*)&dwIPlen);
  IPAddressString[i]=IP;
 }
 
 m_strIPAddress1 = IPAddressString[0];
 m_strIPAddress2 = IPAddressString[1];
 m_strIPAddress3 = IPAddressString[2];
 m_strIPAddress4 = IPAddressString[3];
 m_strIPAddress5 = IPAddressString[4];
 m_strIPAddress6 = IPAddressString[5];
 m_strIPAddress7 = IPAddressString[6];
 m_strIPAddress8 = IPAddressString[7];
 m_strIPAddress9 = IPAddressString[8];
 m_strIPAddress10 = IPAddressString[9];
     
 //On met à jour le champ de chemin
 UpdateData(FALSE);
 
Et j'arrive presque à faire ce que je veux, à savoir, récupérer les valeurs de la base de registre pour les mettre dans le m_strIPAddressX...Tout fonctionne bien, excepté pour la dernière valeur !! A la fin de ce code, m_strIPAddress10 ne contient pas la bonne valeur, mais il contient celle de m_strIPAdress9...Comment cela se fait il ??
 
Merci d'avance à la personne qui pourra m'expliquer celà pour me permettre d'avancer...  




 
et si tu en lisais 11?  ;)

n°56193
Rebel
Posté le 29-08-2001 à 22:25:15  profilanswer
 

Ouais, j'ai essayé ca fait pareil...
Appremment, c'est parce que c'est une adresse du type "xx.xx.xx.xx" qui est stockée, alors que dans les autres champs c'est une adresse du style "x.x.x.x"...Ne serait-ce pas un problème de mémoire ?
Aller, y'a bien un pro du C++ qui peut me filer un coup de main ??? :)

n°56240
therier
heu...coucou!
Posté le 30-08-2001 à 10:11:33  profilanswer
 

Rebel a écrit a écrit :

Ouais, j'ai essayé ca fait pareil...
Appremment, c'est parce que c'est une adresse du type "xx.xx.xx.xx" qui est stockée, alors que dans les autres champs c'est une adresse du style "x.x.x.x"...Ne serait-ce pas un problème de mémoire ?
Aller, y'a bien un pro du C++ qui peut me filer un coup de main ??? :)  




 
qu'entends tu par xx ou x?
 
1.2.3.4  c x.x.x.x ?
11.22.33.44 c xx.xx.xx.xx ?

n°56243
JPA
Posté le 30-08-2001 à 10:35:12  profilanswer
 

J'ai pas de solution, mais RegQueryvalue est une fonction obsolete : Il vaut mieux utiliser RegQueryValueEx.
Voir :
http://www.silurian.com/gawp/gotw/reg1/REGQV.htm
http://www.silurian.com/gawp/gotw/reg1/REGQVE.htm
http://www.silurian.com/gawp/gotw/reg1/REGsQ1.htm
 
A+

n°56416
Rebel
Posté le 30-08-2001 à 22:25:52  profilanswer
 

therier a écrit a écrit :

 
 
qu'entends tu par xx ou x?
 
1.2.3.4  c x.x.x.x ?
11.22.33.44 c xx.xx.xx.xx ?  




 
Effectivement, c'est ça que j'entends avec les xx et les x.
Mais finalement je crois que je vais pas faire une boucle et que je vais appeler la fonction à chaque fois...

n°56419
Rebel
Posté le 30-08-2001 à 22:34:27  profilanswer
 

JPA a écrit a écrit :

J'ai pas de solution, mais RegQueryvalue est une fonction obsolete : Il vaut mieux utiliser RegQueryValueEx.
Voir :
http://www.silurian.com/gawp/gotw/reg1/REGQV.htm
http://www.silurian.com/gawp/gotw/reg1/REGQVE.htm
http://www.silurian.com/gawp/gotw/reg1/REGsQ1.htm
 
A+  




 
Merci beacoup pour les liens je connaissais pas ce truc pour avoir les exemples en temps réel, c'est super chouette !!! :sol:

n°56462
la viper
Posté le 31-08-2001 à 03:07:59  profilanswer
 

en fait .. ce qu'il se passe surement .. c que ton programme n'arrive pas à lire ton ip 10 et comme dans le buffer que tu utilises pour stocker tes ip (IP) il y a la valeur precedente, c celle ci qui est copier dans le tableau pour l'IP10.
je c pas si c comprehensible. enfin
 
IPAddressString[9]=IP;
retour au debut IP ne change pas de valeur car la cle n'est pas trouvée.
IPAddressString[10]=IP=IPAddressString[9]

n°56692
Rebel
Posté le 01-09-2001 à 00:17:41  profilanswer
 

J'ai essayé en mettant un buffer différent pour chaque IP...et bien, ça ne marche pas non plus !!! D'autres idées ? Aidez-moi s'il vous plaît parce que là, ça devient vraiment ennuyeux !! :crazy:

n°56695
ayachi
Posté le 01-09-2001 à 01:19:03  profilanswer
 

Rebel a écrit a écrit :

J'ai essayé en mettant un buffer différent pour chaque IP...et bien, ça ne marche pas non plus !!! D'autres idées ? Aidez-moi s'il vous plaît parce que là, ça devient vraiment ennuyeux !! :crazy:  




 
la viper t'a je pense donné la solution, regarde si ta 10e entrée existe.

mood
Publicité
Posté le 01-09-2001 à 01:19:03  profilanswer
 

n°56715
la viper
Posté le 01-09-2001 à 11:18:43  profilanswer
 

j'ai +/- le meme probleme avec mon appli ..
 
je lis la clé a-b-e-f-g-h-i... elles renvoient toutes un resultat sauf le g qui ne veut absolumenent pas me rendre sa valeur .. ca se trouve tu as le meme genre de probleme... moi j'ai laissé l'affaire.

n°56728
Rebel
Posté le 01-09-2001 à 12:04:25  profilanswer
 

Oui, mais moi, je peux pas lâcher, je dois absolument faire marcher ce machin...je suis pas du style à abandonné !!! Et en plus, j'ai pas d'autre solution, alors...
 
Ayachi > Non, il ne m'a pas donné la solution, j'ai bien une 10ème valeur, et il n'arrive pas à la lire !

n°56736
ayachi
Posté le 01-09-2001 à 13:24:29  profilanswer
 

Rebel a écrit a écrit :

Oui, mais moi, je peux pas lâcher, je dois absolument faire marcher ce machin...je suis pas du style à abandonné !!! Et en plus, j'ai pas d'autre solution, alors...
 
Ayachi > Non, il ne m'a pas donné la solution, j'ai bien une 10ème valeur, et il n'arrive pas à la lire !  




 
mailes-moi tes données du registre sous HubSoft, je vais essayer chez moi.

n°56910
Rebel
Posté le 02-09-2001 à 11:12:19  profilanswer
 

Merci de ton aide : Check your mail ! :sol:

n°56933
ayachi
Posté le 02-09-2001 à 13:33:54  profilanswer
 

Rebel a écrit a écrit :

Merci de ton aide : Check your mail ! :sol:  




 
reçu, je fais les essais aujourd'hui.

n°56952
ayachi
Posté le 02-09-2001 à 14:56:00  profilanswer
 

Bon ok, je pense avoir trouvé.
Bon le problème, tu remarques que IP10 est avant IP9 dans le .reg que tu m'as envoyé, il est en deuxième position d'ailleurs. Quand tu lis la base de registre, tu le fais séquentiellement donc si tu dépasses une clé, tu ne peux plus la lire, du moins avec ton code. ça fonctionne comme un curseur. Si tu debug tu verras que quand i=9, regqueryvalue retourne une erreur et donc IP n'est pas modifé et contient la dernière bonne valeur lue ie IP9.
Donc il faut se repositionner avant de lire. J'ai vu ça dès que j'ai regardé ton .reg.
La solution, il faut utiliser le trio RegOpenKeyEx, RegQueryValueEx, RegCloseKey.
Voici le code qui marche du moins chez moi, fais un copier coller
 
CDialog: nInitDialog();
 
long lResult; //Variable contenant le résultat du  RegQueryValue
char IP[20]; //Définition de la variable contenant la valeur de la clé
DWORD dwIPlen=20;
DWORD dwKeyType; // ne pas l'oublier
HKEY Key;
 
CString IPAddressKey[10] = {"Software\\HubSoft\\IP1","Software\\HubS
 
 
oft\\IP2",
"Software\\HubSoft\\IP3","Software\\HubSo
 
 
ft\\IP4",
"Software\\HubSoft\\IP5","Software\\HubSo
 
 
ft\\IP6",
"Software\\HubSoft\\IP7","Software\\HubSo
 
 
ft\\IP8",
"Software\\HubSoft\\IP9","Software\\HubSo
 
 
ft\\IP10"};
 
CString IPAddressString[10];
 
for (int i=0; i<10; i++)
{
 dwIPlen = 20;
 RegOpenKeyEx( HKEY_LOCAL_MACHINE, IPAddressKey[i], 0, KEY_READ, &Key );
 lResult = RegQueryValueEx( Key, "", 0, &Dw, (LPBYTE) IP, (LPDWORD) &dwIPlen );
 IPAddressString[i]=IP;
 RegCloseKey( Key );
}
 
m_strIPAddress1 = IPAddressString[0];
m_strIPAddress2 = IPAddressString[1];
m_strIPAddress3 = IPAddressString[2];
m_strIPAddress4 = IPAddressString[3];
m_strIPAddress5 = IPAddressString[4];
m_strIPAddress6 = IPAddressString[5];
m_strIPAddress7 = IPAddressString[6];
m_strIPAddress8 = IPAddressString[7];
m_strIPAddress9 = IPAddressString[8];
m_strIPAddress10 = IPAddressString[9];
   
//On met à jour le champ de chemin
UpdateData(FALSE);
 
PS il peut y avoir des erreurs, ça fait longtemps que j'ai pu toucher à la base des registres, la dernière fois c'était pour faire des fonctions de recherche générique dessus.

 

[edtdd]--Message édité par ayachi--[/edtdd]

n°56956
ayachi
Posté le 02-09-2001 à 15:08:24  profilanswer
 

ah oui j'ai fait des tests en mode console, donc ce code je ne l'ai pas fait fonctionner mais il DEVRAIT fonctionner.

n°57021
Rebel
Posté le 02-09-2001 à 22:22:34  profilanswer
 

Merci beacoup de ton aide ayachi !!! Et check your mail again ;-)

n°57340
Rebel
Posté le 03-09-2001 à 23:13:24  profilanswer
 

Effectivement ca marche !!!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Lire dans la base de registre : phénomène étonnant !!

 

Sujets relatifs
base de donnée sous fronpage...[VC++]lire un mp3
Perl : Comment lire une ligne precise inscrite dans un fichier ...[SQL Server] comment dupliquer une base?
[VB5] Lire et créer un raccourcis[VB] lire des donnees dans un autre fichier et les copier
[XML & MFC] écrire et lire un fichier XML, quelles classes MFC ?Ramener sa base Mysql en local
Base de registre !!! 
Plus de sujets relatifs à : [C++] Lire dans la base de registre : phénomène étonnant !!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR