Problem mit RegOpenKeyEx()
-
Hallo,
heute melde ich mich in diesem Forum das erste Mal mit einer Frage.
Ich programmiere mit dem C++Builder (6 und 2006) und habe jetzt folgendes Problem:AnsiString TMainForm::GetRegValue(HKEY root, char* RegPath) { char * result = new char[MAX_PATH]; ZeroMemory(result,MAX_PATH); DWORD size = MAX_PATH; long error; HKEY hKey; String value = "xxxxx"; error = RegOpenKeyEx(root,RegPath,NULL,KEY_READ,&hKey); if (error==ERROR_SUCCESS) { ShowMessage("RegOpenKey erfolgreich."); RegQueryValueEx(hKey,TEXT("Location"),NULL,NULL,result,&size); // value = AnsiString(result); } else ShowMessage("Fehler: "+AnsiString(error)); return value; }Mit dieser Funktion will ich Werte aus der Registry auslesen.Ich übergebe der Funktion HKEY_CURRENT_USER in der Variablen root und einen existierenden Unterschlüssel in der Variablen RegPath.
Der Rückgabewert von RegOpenKeyEx ist 2.Wenn ich als root z.B. HKEY_LOCAL_MACHINE sowie einen existierenden Unterschlüssel übergebe, bekomme ich den korrekten Wert dieses Schlüssels als Funktionsrückgabe.
Was ist die Ursache für den Fehler bei HKEY_CURRENT_USER ???
Gruß Udo
-
If the function fails, the return value is a nonzero error code defined in Winerror.h. You can use the FormatMessage function with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic description of the error.
-
Hallo,
ich habe den Code folgendermaßen erweitert:
AnsiString TMainForm::GetRegValue(HKEY root, char* RegPath) { char * result = new char[MAX_PATH]; ZeroMemory(result,MAX_PATH); DWORD size = MAX_PATH; long error; HKEY hKey; String value = "xxxxx"; error = RegOpenKeyEx(root,RegPath,NULL,KEY_READ,&hKey); if (error==ERROR_SUCCESS) { ShowMessage("RegOpenKey erfolgreich."); RegQueryValueEx(hKey,TEXT("nc_path"),NULL,NULL,result,&size); // value = AnsiString(result); } else { LPVOID lpMsgBuf; if (FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL )) { MessageBox(NULL,(LPCTSTR)lpMsgBuf, TEXT("Error"), MB_OK); LocalFree(lpMsgBuf); } } return value; }Bekomme folgende Ausgabe in der Messagebox: "Vorgang wurde erfolgreich abgeschlossen."
der Wert von value ist aber immernoch "xxxxx".
Gruß Udo