Reqistry auslesen...



  • das forum hat mir schon in vielen bereichen weitergeholfen, aber immer wenn ich mit registry-api arbeiten muss bekomme ich kopfschmerzen 😉
    es soll einfach nur der wert ausgelesen werden...

    HKEY Rkey;
    char rrkey[MAX_PATH+1]; // zB: "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"
    char rrval[48];         // zB: "Tweak UI"
    char rbuffer[MAX_PATH+1], daten[MAX_PATH+1];
    
    DWORD type, dw;
    DWORD size = sizeof(rbuffer);
    
    RegCreateKeyEx(HKEY_LOCAL_MACHINE, rrkey, 0, NULL, REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &Rkey, &dw);
    // gibt ERROR_SUCCESS zurück
    
    if(RegQueryValueEx(Rkey, rrval, NULL, &type, (BYTE *)rbuffer, &size) != ERROR_SUCCESS) // <- gibt nicht ERROR_SUCCESS zurück
    {
        // ...
    } else {
        sprintf(daten, "%s >> %s", rrval, rbuffer);
    }
    
    RegCloseKey(Rkey);
    

    [ Dieser Beitrag wurde am 17.03.2003 um 16:03 Uhr von diffuser editiert. ]



  • du hast RegQueryValueEx() keinen "type" mitgegeben.

    Wenn du einen string auslesen willst musst du vorher

    DWORD type = REG_SZ; //siehe MSDN unter RegQueryValueEx
    

    machen.

    [edit]
    kannst auch statt &type, NULL übergeben, dann ist der typ egal
    [/edit]

    grüsse

    [ Dieser Beitrag wurde am 17.03.2003 um 16:16 Uhr von soUrcerer editiert. ]



  • vielen dank für deine antwort. aber RegQueryValueEx gibt immer noch nicht ERROR_SUCCESS zurück 😕



  • das ist eine funktion, aus meiner RegistryManager Klasse ... die funzt ....
    vielleicht kannst damit was anfangen.

    CString CRegMan::GetRegistryValue(HKEY hkRootKey, CString cstrKeyFolder, CString cstrName)
    {
        HKEY hkFolder;
        LONG nResult = RegOpenKeyEx( hkRootKey, cstrKeyFolder, 0,KEY_READ, &hkFolder);
    
        if( nResult == ERROR_SUCCESS ){
    
            DWORD dwSize=256, dwType=REG_SZ;
            unsigned char* pucValue = new unsigned char[256];
    
            nResult = RegQueryValueEx( hkFolder, cstrName, NULL, &dwType , pucValue, &dwSize);
    
            CString cstrTemp = "";
    
            if(nResult == ERROR_SUCCESS)
                cstrTemp = pucValue;
    
            delete[] pucValue;
    
            RegCloseKey(hkFolder);
    
            return cstrTemp;
        }
    
        return "";
    }
    

    grüsse

    [ Dieser Beitrag wurde am 17.03.2003 um 16:58 Uhr von soUrcerer editiert. ]



  • soUrcerer, vielen vielen dank für deine hilfe.
    dadurch, dass ich meinen code schnipsel hier gepostet habe, ist mir aufgefallen, dass der fehler nicht in dem registry call liegen kann 🙄
    ich hab den fehler gefunden und behoben.
    der code aus dem ersten post (und DWORD type = REG_SZ; ) funktioniert jetzt wunderbar.

    vielen dank nochmal soUrcerer,
    tut mir leid wegen der umstände 🙂

    [ Dieser Beitrag wurde am 17.03.2003 um 16:56 Uhr von diffuser editiert. ]


Anmelden zum Antworten