Registry: Pfad wird nicht ausgelesen / Visual C++



  • Hi @ all,

    ich versuche _verzweifelt_ einen einfachen Wert aus der Registry auszulesen. Hab mich auch schon durch alle mgl Foren gehangelt aber nichts gefunden. Hier mal mein Code:

    char lszValue[255];
    	 HKEY hKey;
    	 LONG AcroStatus;
    	 DWORD dwType=REG_SZ;
    	 DWORD dwSize=255;
    	 AcroStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\AcroRd32.exe"), NULL,  KEY_ALL_ACCESS, &hKey);
    	 if (AcroStatus == ERROR_SUCCESS)
    	 {
    		  AcroStatus = RegQueryValueEx(hKey, TEXT(""), NULL, &dwType,(LPBYTE)&lszValue, &dwSize);
    		  if (AcroStatus == ERROR_SUCCESS)
    		  {
    			   MessageBoxA( NULL, (LPCSTR)lszValue, "Registry", MB_OK );
    		  }
    	   }
    

    Das Problem ist jetzt, dass er mir nur "C" statt "C:\Programme\Acro..."ausgibt (wenn ich es in Visual Studio .NET 2003 ausführe). Wenn ich allerdings in DevC++ ausprobiere funktioniert es!!?!?! 😮 Was mache ich falsch? 😕
    Bitte helft mir


  • Mod

    In Dev C ist das wahrscheinlich in MBCS Code und in VC ein Unicode Projekt.
    Dein Unfug den Du machst steht hier:

    MessageBoxA( NULL, (LPCSTR)lszValue, "Registry", MB_OK );
    

    Der Cast ist brutal und kann nicht funktionieren weil dadurch aus dem Unicode String kein MBCS String wird.

    So sieht der universelle Codee aus:

    TCHAR szValue[255];
         HKEY hKey;
         LONG AcroStatus;
         DWORD dwType=REG_SZ;
         DWORD dwSize=255;
         AcroStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\AcroRd32.exe"), NULL,  KEY_ALL_ACCESS, &hKey);
         if (AcroStatus == ERROR_SUCCESS)
         {
              AcroStatus = RegQueryValueEx(hKey, TEXT(""), NULL, &dwType,(LPBYTE)&lszValue, &dwSize);
              if (AcroStatus == ERROR_SUCCESS)
              {
                   MessageBox( NULL, szValue, TEXT("Registry"), MB_OK );
              }
           }
    

    Beachte die TCHAR Notation.



  • Replace RegQueryValueEx with RegQueryValueExA, and TEXT("") with NULL oder "".



  • Hi,
    danke für die rasche Antwort!
    Der erst Tipp war schon top. Leider kann man den Output nicht so weiterverarbeiten wie ich es brauche.
    Mit Variante 2 klappts 100%. Vielen Dank!!! Super Forum



  • Hello again,

    leider habe ich jetzt ein neues Problem. Bei einem Programm steht in der Ordnerstruktur in der Registry leider eine Versionsnummer. Die kann sich ja unterscheiden bei anderen Usern. Wie kann ich umgehen, dass ich die Versionsnummer angeben muss? Wildcards scheinen nicht zu funktionieren (habs mit "*" probiert). Hat jemand noch eine andere Idee?

    Danke für die Hilfe

    Gruß whatwhat


  • Mod

    Du musst den Schlüssel entweder genau angeben oder Du musst die vorhandenen Schlüssel aufzählen. Mit * und Wildcards geht da nichts!



  • Hi,
    was meinst du mit "vorhandenen Schlüssel aufzählen"? Könntest du das bitte weiter erleutern? Danke, whatwhat

    Edit: Hat sich erledigt. Habe einen anderen Weg gefunden. Trotzdem Danke!


Anmelden zum Antworten