begin process at 2010 03 22 11:36:16
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Autre

 > 

Enumération incomplète avec RegEnumKeyEx


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Enumération incomplète avec RegEnumKeyEx

lundi 26 mars 2007 à 19:40:25 | Enumération incomplète avec RegEnumKeyEx

Taron31

Membre Club
Bonjour, dans un programme je dois énumérer toutes les clefs de HKEY_CURRENT_USER, j'ouvre donc cette clef, je récupère le nombre de subkeys (RegQueryInfoEx), ensuite j'énumère toutes les subkeys avec RegEnumKeyEx, dans mon HKEY_CURRENT_USER, il y'a 15 subkeys, la fonction RegEnumKeyEx devrait donc me les énumérer toutes, le problème étant qu'elle me renvoie un erreur de code 234 (ERROR_MORE_DATA) ce qui veut dire que le buffer recevant le nom de la clef est trop petit, pourtant j'ai beau l'agrandir, j'ai toujours la même erreur... si vous avez deja rencontré le meme pb...

Voici le code :

#include <windows.h>
#include <stdlib.h>
#include <stdio.h>

DWORD X = 0, dwSubKeys = 0;

void enumKeys()
{
    HKEY hKey;
    DWORD dwNameLen;
    PCHAR pnameSubKey;

    if(RegOpenKeyExA(HKEY_CURRENT_USER, NULL, 0, 0xF003F, &hKey) != ERROR_SUCCESS) {
   
        MessageBoxA(NULL, "Error RegOpenKeyEx", "Error", MB_OK);
        return ;
     }   

    if(RegQueryInfoKeyA(hKey, NULL, 0, NULL, &dwSubKeys, NULL,
         NULL, NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) {
   
             MessageBoxA(NULL, "Error RegQueryInfoKey", "Error", MB_OK);
             return ;
     }
    printf("Num: %d\n\n", dwSubKeys);

    for(int i = 0; i < dwSubKeys; i++) {
       
        CHAR nameSubKey[10000];

        if(X >= dwSubKeys) exit(0);

        if(RegEnumKeyExA(hKey, X, nameSubKey, &dwNameLen,
             NULL, NULL, NULL, NULL) != ERROR_SUCCESS) {

                 printf("Ret: %d\n\n", RegEnumKeyExA(hKey, X, nameSubKey,
                            &dwNameLen, NULL, NULL, NULL, NULL));
           
            return ;   
        }

        X++;
        printf("SubKey: %s\n", nameSubKey);
    }

    RegCloseKey(hKey);
}

int main(int argc, char *argv[])
{
    for(int i = 0; i < 10; i++) enumKeys();
    return 0;
}

Si vous pouvez m'éclaires, meci


___________________
MSP
- Microsoft Student Partner (Microsoft)
lundi 26 mars 2007 à 19:47:46 | Re : Enumération incomplète avec RegEnumKeyEx

Taron31

Membre Club
dsl, problème réglé, il suffisait de donner une valeur à dwNameLen, dsl :s


___________________
MVS
- Most Valuable Student ( Microsoft)
lundi 26 mars 2007 à 20:26:40 | Re : Enumération incomplète avec RegEnumKeyEx

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
Un exemple de "goto" judicieux au lieu d'accolades à rallonges:
if(RegQueryInfoKeyA(hKey, ...)) goto keyCLOSE;
.....
.....
keyCLOSE:
RegCloseKey(hKey);

éviterait d'oublier de fermer le handle de clé et aussi de mettre plusieurs appels RegCloseKey.

ciao...
BruNews, MVP VC++


Cette discussion est classée dans : error, return, hkey, regenumkeyex, dwsubkeys


Répondre à ce message

Sujets en rapport avec ce message

Prob WIN32 [ par AngeloVivaldi ] bonjour, voici un code ke g tapé pour mon apprentissage de la prog Graphique :#include LRESULT CALLBACK WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, L Comment declarée la matrice matrix[x][y] [ par pirate75000 ] Comment declarée la matrice matrix[x][y]Le but est de remplir la matirce avec le Tableau Tabpuis effectuer une inversion video par matricepuis réécrit problème classe winnt.h [ par totoscill ] Bonjour,J'ai un problème avec la classe winnt.h de windows:J'essais d'ouvrir mon port série avec des fonction qui utilise DWORD.Lorsque je compile:d:\ Dialog fenetre enfant qui bloque [ par NairodDorian ] Bonjour,Mon probleme est le suivant, j'utilises les resources avec des dialog et je voudrai affiche un dialogue defini par Child dans les proprietes d Utilisé du multithread sous unix (C++) [ par Kenshiroooo ] Bonjour, très probablement qu'il existe déja un poste dans lequel il est expliquer ce que je vais dès maintenant vous demander... mais je pers patienc recv(...); comment intégré un timeout ? [ par paramotdam ] Bonjour,Je suis débutant dans l'utilisation des sockets et j'aimerais amélioré un mini chat que j'ai trouvé sur ce site.Sans passé par les détails, vo LIBCMTD.lib(crt0.obj) : error LNK2019 [ par tarretg ] Bonjour,Je suis débutant en C++ et j'ai un problème avec mon éditeur de lien.Mon projet compile sans erreur mais je n'arrive pas à générer l'exécutabl Toolbar clignote quand resize [ par padej450 ] Bonjour,    J'ai un petit souci, pour le boulot je dois faire un plotteur de courbe. Le probleme c'est que ma toolbar clignote lorsque je modifie la t probleme retour tableau [ par lenanttais44 ] Bonjour,Je voudrai savoir si ma facon d'écrire une fonction est bonne.std::vector& fusion(std::vector& Tab1,std::vector& Tab2){   ........return Tfin; Pb avec le vUpdate et les messages d'erreurs sous devC++ [ par younesup ] lorsque je mets en route le vUpdate il se lance et s'arrette brusquement au bout de quelques secondes en m'affichant ces deux messages d'erreurs:__err


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales