Registery Werte auslesen bei Mehrteiliger Zeichenfolge



  • Hallo ich versuche gerade eine Mehrteilige Zeichenfolge auszulesen.

    So steht der Wert in der Registery:

    COMPAQ - 20020729
    686Y2 v3.04

    Aber ich bekomme immer nur ausgeben: COMPAQ - 20020729

    Wie funktioniert das bei Mehrteiligen Zeichenfolgen ?

    Hier mein Code:

    int ret_open_key =0;
    int ret_reg_query =0;
    
    char data[1000];
    char *save = "0";
    
    DWORD size =1000;
    
    HKEY key = HKEY_LOCAL_MACHINE ;
    
    ret_open_key = RegOpenKeyEx
                              (
                                    key,
                                    "HARDWARE\\Description\\System",
                                    0,
                                    KEY_READ ,
                                    &key
                              );
    
            if ( ret_open_key != 0 )
            {
                    MessageBox(0,"Registery Pfad nicht gefunden","Fehler",0);
            }
    
    ret_reg_query = RegQueryValueEx
                              (
                                key ,
                                "SystemBiosVersion" ,
                                NULL ,
    
                                NULL ,
    
                                data ,
                                &size
                              );
    
          cout<<data;
    


  • Hi,

    wahrscheinlich handelt es sich um doppelte Stringtermination.
    D.h. der erste String hat eine ganz normale Nullterminierung.
    Dahinter folgt der zweite String (ebenfalls mit normaler Nullterminierung).
    Nach dem letzten String kommt ein Null, als Zeichen, daß keine weiteren Strings mehr kommen.

    Hast Du den RegKey-Typ überprüft?
    Siehe REG_MULTI_SZ in Registry Value Types: http://msdn.microsoft.com/en-us/library/ms724884(v=VS.85).aspx

    HTH,
    Martin



  • Ja der Wert ist ein: REG_MULTI_SZ

    Ich bekomme jedoch jetzt diese 2 Fehlermeldungen:

    [C++ Fehler] Unit1.cpp(48): E2034 Konvertierung von 'int' nach 'unsigned long *' nicht möglich

    [C++ Fehler] Unit1.cpp(48): E2342 Keine Übereinstimmung des Typs beim Parameter 'lpType' ('unsigned long *' erwartet, 'int' erhalten)

    Aber mit den Fehlermeldungen kann ich nix Anfange 😕

    #include <iostream>
    #include <windows>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    int ret_open_key;
    int ret_reg_query;
    
    char data[1000];
    
    DWORD size =1000;
    
    HKEY key = HKEY_LOCAL_MACHINE ; 
    
    ret_open_key = RegOpenKeyEx 
                              ( 
                                    key, 
                                    "HARDWARE\\Description\\System", 
                                    0,
                                    KEY_READ , 
                                    &key 
                              ); 
    
            if ( ret_open_key != 0 )
            {
                    MessageBox(0,"Registery Pfad nicht gefunden","Fehler",0);
            }
    
    ret_reg_query = RegQueryValueEx
                              ( 
                                key , 
                                "SystemBiosVersion" ,
    
                                NULL , 
    
                                REG_MULTI_SZ  ,
    
                                data ,
                                &size 
                              );
    
            if ( ret_reg_query != 0 )
            {
                    MessageBox(0,"Key error","Fehler",0);
            }
    
          cout<<data;
    
    system("PAUSE");
    }
    


  • Du mußt schon die Beschreibung der Funktion RegQueryValueEx() genau lesen.

    Du kannst nicht die Parameterkonstante REG_MULTI_SZ an die Funktion übergeben!
    Sondern Du kriegst von der Funktion mitgeliefert, um was für einen Reg-Typ es sich handelt.

    D.h. eine DWORD-Variable definieren, und die Adresse dieser Variable an die Funktion mit übergeben.
    Danach kannst Du den Inhalt der Variable auf Reg-Typ hin überprüfen, in Deinem Fall also REG_MULTI_SZ.


Anmelden zum Antworten