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


Anmelden zum Antworten