Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Problem mit Ordner aus der Registry auslesen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.12.2004, 12:30 Uhr
LowFly



hy,
ich hab ein Problem mit dem auslesen der Ordner aus der Registry. Nach langem code zusammenflicken, bin ich total verwirrt & seh den code vor lauter Buchstaben nicht mehr. Momentan bin ich mit meinem prog soweit, das mir die gesammte Registry durchlaufen wird aber mein prog findet das ende der registry nicht.

Ich hab mir eine Classe CRegistryTreeCtrl erstellt die von der CTreeCtrl abgeleitet wird.
In dieser CRegistryTreeCtrl les ich dann die registry mit volgendem code aus.


Code:
//////////////////////////////////////////
//Verweis aus einer anderen void Funktion
RefreshKey(HKEY_CURRENT_USER,TVI_ROOT,0);

//////////////////////////////////////////////////////////
//Lese Ordner unter dem Angegebene Schlüßel hMasterKey aus
void CRegistryTreeCtrl::RefreshKey(HKEY hMasterKey,HTREEITEM hRootItem,int nIndex)
{
char KeyName[1024]="";
char SubKeyName[1024]="";
BYTE Data[1024]="";
DWORD dwDataSize=sizeof(Data);
HKEY hKey;
HTREEITEM nextRoot;

//Durchlaufe solange die Schleife solange Ordner (KeyName) unter der
//angegbenen Indexzahl (nIndex) gefunden werden.
long EnumResult = RegEnumKey(hMasterKey,nIndex,KeyName,dwDataSize);
while(EnumResult!=ERROR_NO_MORE_ITEMS)
{    
    ////////////////////////////////////////////////////
    //Für TreeItem Ertsellung macht keine Probleme//////
    char *cItemText = szString.GetCharStrCpy(KeyName,0);
    TV_INSERTSTRUCT tvis;
    ZeroMemory(&tvis,sizeof(TV_INSERTSTRUCT));
    tvis.hParent             = hRootItem;
    tvis.hInsertAfter         = TVI_LAST;
    tvis.item.mask             = TVIF_CHILDREN|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT;
    tvis.item.pszText         = cItemText;
    tvis.item.iImage         = 1;
    tvis.item.iSelectedImage         = 1;
    tvis.item.cChildren         = TRUE;    
    HTREEITEM hItem = InsertItem( &tvis );
    /////////////////////////////////////////////////////

    //Versuche nächsten Ordner zu öffnen
    //ERROR_SUCCESS, ERROR_NO_MORE_ITEMS, NULL
    if(RegOpenKey(hMasterKey,KeyName, &hKey)!=ERROR_NO_MORE_ITEMS)
    {
        //Ist unter dem geöffneten Ordner ein weiterer Ordner vorhanden
        if(RegEnumKey(hKey,0,SubKeyName,dwDataSize)!=ERROR_NO_MORE_ITEMS)
        {
            MessageBox(SubKeyName);
            //Legt nächste oberste Roote für Tree Eintrag fest
            nextRoot  = hItem;
            //Starte neue Schleife mit neuem Schlüßel & lese dort die Ordner aus
            RefreshKey(hKey,nextRoot,0);
        
        }//ende if RegEnumKey            
    }//ende if RegOpenKey

    nIndex++;//Angewählte Ordner Nr um eins erhöhen
    EnumResult = RegEnumKey(hMasterKey,nIndex,KeyName,dwDataSize);
        
}//ende while
//Schliese den angebenen Schlüßel
RegCloseKey(hMasterKey);

}//ende void



der fehler das die schleife nicht beendet wird passiert meines erachtens unter

Code:
if(RegOpenKey(hMasterKey,KeyName, &hKey)!=ERROR_NO_MORE_ITEMS)


dort hab ich schon alle varianten eingesetzt die mir so eingefallen sind oder die ich in der msdn gefunden hab. ERROR_SUCCESS, ERROR_NO_MORE_ITEMS, NULL alle mit != oder auch == führen sobald RegOpenKey anspricht weit hinter dem ende der der registry zum absturz.

Mit weit hinter dem ende mein ich, das mir unter MessageBox(SubKeyName) der letzte ordner der registry angezeigt wird, ich dann aber nach dem letzten Ordner noch ~200 lehre SubKeyName bestätigen muß, bis dann eine Fehlermeldung mit einer unbehadelten Ausnahme kommt.

Spricht RegOpenKey nicht an, dann stehn alle Ordner die er unter HKEY_CURRENT_USER findet korrect in der Tree, nur leider halt ohne Unterordner.

Was muß ich jetzt machen um die Schleife zu beenden wenn RegOpenKey anspricht.
vielen dank schonmal
lowfly
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: