RegOpenKeyEx liefert leider unvollständigen String



  • Hallo,
    bekomme leider nur den Anfang des Strings.
    zum Verständnis hier der Code

    HKEY hKey;
    
    	 char *sz_wert = new char[MAX_PATH];
    	 ZeroMemory(sz_wert, MAX_PATH);
    	 DWORD KeySize = MAX_PATH;
    
    	 if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\PC Alert 4"),NULL,KEY_QUERY_VALUE,&hKey) == ERROR_SUCCESS) 
    	 {
    		 cout << "PC Alert 4 key vorhanden" << endl;
    		 RegQueryValueEx(hKey, TEXT("UninstallString"), NULL,NULL, (LPBYTE)sz_wert, &KeySize) ;
    		 cout << sz_wert << endl;
    			 }
     RegCloseKey(hKey);
    

    sz_wert liefert mir aber nur D zurück.
    sollte aber
    D:\WINDOWS\IsUninst.exe -f"D:\Programme\MSI\PC Alert 4\Uninst.isu"
    zurückliefern.

    Was mache ich verkehrt ?
    wie muss mein Aufruf aussehen damit ich den kompletten String bekomme ?

    Gruß

    central



  • Schau mal in deine Projekt-Settings, ob du als Ansi oder Unicode übersetzt hast - im letzteren Fall würdest du einen UNICODE-String zurückbekommen. Zur Lösung des Problems kannst du entweder konsequent mit den Unicode-Einstellungen arbeiten (TCHAR anstelle von char), dein Projekt umstellen auf Ansi-Modus oder explizit die RegQueryValueExA() aufrufen.



  • Vielen Dank,
    nachdem ich auf

    Use Multi-BYte Character Set

    umgestellt habe.
    Funktioniert es wie es soll 😃
    Wahnsinn da wäre ich im leben nicht drauf gekommen.

    Nochmal vielen Dank.

    Gruß

    central



  • Man muß nur wissen, wonach man suchen soll 😉 Und im MSDN-Eintrag von RegQeuryValueEx() steht auch die Lösung drin:

    REG_SZ
    A null-terminated string. It will be a Unicode or ANSI string depending on whether you use the Unicode or ANSI functions.


Anmelden zum Antworten