Überprüfen ob Key(value) existiert...

partitionist

Erfahrenes Mitglied
Hab folgenden Code:

Code:
BOOL KeyExists(HKEY hKey, LPCTSTR lpSubKey)
    {
        BOOL bRet;
        HKEY hSubKey;
        LONG lResult;

        if(ERROR_SUCCESS != (lResult = RegOpenKeyEx(hKey, lpSubKey, 0, 0, &hSubKey)))
        {
            bRet = (ERROR_FILE_NOT_FOUND == lResult) ? FALSE : TRUE;
        }
        else
        {
            RegCloseKey(hSubKey);
            bRet = TRUE;
        }

        return(bRet);
    }

    string getValue(HKEY KEY, char *path, char *value)
    {
        //HKEY KEY = HKEY_LOCAL_MACHINE;
        //             HKEY_CURRENT_USER;

        if(KeyExists(KEY, path) == 1)
        {
            HKEY key;
            DWORD dwType;
            DWORD dwSize=300;
            char szString[300];

            RegOpenKeyEx(KEY, path,0,KEY_READ, &key);
            RegQueryValueEx(key,value,NULL,&dwType,(BYTE *)szString,&dwSize);
            RegCloseKey(key);
        
            return szString;
        }
        else 
            return "ERROR: Key nicht gefunden.";        
    }
Wenn man die Funktion getValue() mit den Parametern aufruft, wird zuerst mit der Funktion KeyExists() geprüft ob der Key existiert. Sobald der Key existiert wird in der Funktion weitergearbeitet, ABER wenn der Wert value nicht gefunden werden kann oder nicht existiert, dann wird szString mit 300 Zeichen von ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ aufgefüllt und zurückgegeben. Jetzt möchte ich die Funktion KeyExists() erweitern indem ich noch ein Parameter ansetze nähmlich mit value. Wie würdet ihr die Funktion KeyExists() ändern
 
Kann mir keiner helfen, ich will lediglich der Funktion folgende Parameter angeben:
Code:
 KeyExists(HKEY hKey, LPCTSTR lpSubKey, char *value)
Es soll in der Funktion wie oben beschrieben geprüft ob der name(value) existiert, hier ein Beispiel:

ich möchte ein wert ausgeben z.B. die IE version
Der key ist folgender:
Code:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer
Unter "Version" steht die Browserversion.
Jetzt rufe ich meine funktion auf:
Code:
//getValue(HKEY KEY, char *path, char *value)
getValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Internet Explorer", "Version");
Wie kann man jedoch in der Funktion KeyExists() überprüfen ob der Name("Version")
existiert?
 
Hallo,

um festzustellen, ob ein Wert existiert bzw. lesbar ist, musst du den Rückgabewert von RegQueryValueEx() auswerten. Mit deiner KeyExists()-Funktion kommst du daher nicht weiter, es sei denn du baust dort noch einen RegQueryValueEx()-Aufruf mit ein, was allerdings unsinnig ist, weil du dann zweimal das Gleiche machst: Einmal nur zum Nachgucken und einmal zum tatsächlichen Auslesen.
RegQueryValueEx()liefert "ERROR_SUCCESS" bei Erfolg und "ERROR_FILE_NOT_FOUND", falls der Wert nicht existiert. Alle Fehlercodes sind übrigens in "Winerror.h" definiert.

Gruß
MCoder
 
Hab mir folgendes zusammgebastelt:

BOOL ValueExists(HKEY aaKey, LPCTSTR lpSubKey, char *value)
{
char chkvalue[BUFSIZE];
DWORD chksize=BUFSIZE;
LONG lRet;

RegOpenKeyEx(aaKey,lpSubKey,0,KEY_ALL_ACCESS,&aaKey);
lRet = RegQueryValueEx(aaKey, value,NULL,NULL, (LPBYTE) chkvalue, &chksize);
RegCloseKey(aaKey);

if( (lRet != ERROR_SUCCESS) || (chksize > BUFSIZE) )
return 0;
else
return 1;
}
 
Zurück