Probleme beim auslesen der registry



  • Hi also ich will ein Installationsverzeichnis auslesen und hab hier schon im Forum und in der FAQ gut hilfe gefunden aber jetz komm ich nicht weiter und find auch so keine hilfe also frag ich euch:
    Wieso kommt hier als Ausgabe immer 256?

    HKEY hKey;
    RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\Blizzard Entertainment\World of Warcraft\InstallPath",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,0);
    DWORD dwData = 256;
    BYTE cDaten[256] = "";
    RegQueryValueEx(hKey,"HKEY_LOCAL_MACHINE\SOFTWARE\Blizzard Entertainment\World of Warcraft\InstallPath",0,0,cDaten,&dwData);
    Edit1->Text=(dwData);
    RegCloseKey(hKey);
    

    mfg
    Budala



  • Die Daten werden in cDaten geschrieben.
    probier es mal so:

    HKEY hKey;
    DWORD dwData=256;
    BYTE cDaten[256];
    RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\Blizzard Entertainment\World of Warcraft\InstallPath",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,0);
    RegQueryValueEx(hKey,"HKEY_LOCAL_MACHINE\SOFTWARE\Blizzard Entertainment\World of Warcraft\InstallPath",0,REG_SZ,cDaten,&dwData);
    Edit1->Text=(cDaten);
    RegCloseKey(hKey);
    

    mfg loose


  • Mod

    BTW: Nach HKLM schreiben geht nur als Admin! Unter Vistae gehtdas nur wenn der Prozess als Admin gestartet wurde oder ein requireAdministrator Manifest hat.



  • *grübelt* Der Backslash in einem String-Literal leitet Escape-Sequenzen (wie \n oder \xFF) ein - Wenn du ihn als Zeichen im String verwenden willst, mußt du ihn mit einem weiteren Backslash maskieren:

    RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Blizzard Entertainment\\World of Warcraft\\InstallPath",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,0);
    


  • @loose
    der sagt mir dann

    [C++ Fehler] Unit1.cpp(26): E2034 Konvertierung von 'unsigned char *' nach 'AnsiString' nicht möglich
    

    @CStoll
    ja das dachte ich dann auch als ichs gelesen hatte aber trotzdem kam dann 256 wieder raus 😞



  • RegCreateKeyEx () braucht den "Pfad", RegQueryValueEx () den Schlüsseltyp und -namen. Probier mal so :

    ...
     RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Blizzard Entertainment\\World of Warcraft",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,0);
    ...
     DWORD typ = REG_SZ; // zeichenfolge
    ...
     RegQueryValueEx(hKey,"InstallPath",0,&typ,cDaten,&dwData);
    ...
    


  • wenn ich das so mache kommt 22 raus 😮



  • Und ?!? Stimmt der Wert etwa nicht ?



  • mhh villeicht, aber eigentlich wollte ich das dann da das installations verzeichniss steht, also D:\Spiele\WoW, oder wie immer das is
    jetz weis ich nicht genau ob ich nen komplett falschen ansatz hab oder ich mich falsch ausgedrückt habt -.-



  • Wenn der Schlüssel stimmt, dann ist der Pfad in "cDaten" drin. "dwData" enthält die Länge (Anzahl Zeichen) des Pfades.



  • ja aber wenn ich das mache sagt der wieder

    [C++ Fehler] Unit1.cpp(26): E2034 Konvertierung von 'unsigned char *' nach 'AnsiString' nicht möglich
    


  • Wo kommt jetzt der "AnsiString" her ? "cDaten [256]" sind doch vom Typ "BYTE" ?!?



  • ja das dachte ich mir anfangs auch, aber dann hab ich in der Hilfe nochmal nachgelesen das die Edit1->Text einen String brauch um auszugeben.
    Jetzt müsste ich wissen wie ich einen "unsigned char" in einen String umwandeln kann, dann müsste es auch glaube gehen.

    Ich sag jetzt schon mal Vielen Dank für die viele Mühe die du dir hier machst 👍



  • Oha. Fragen zum "AnsiString" gehören ins Builder-Forum, drei Etagen höher. 🙂
    Probier mal so (C-Cast) :

    ...
     BYTE cDaten[256]; 
    ...
     AnsiString edittext = (char) cDaten;
    
     Edit1 -> Text = edittext;
    ...
    


  • oh man jetzt bringt der mir das:

    Œ



  • Dann mal mit Sternchen (wie gesagt, AnsiString drei Etagen höher) :

    ...
     BYTE cDaten[256]; 
    ...
     AnsiString edittext = (char *) cDaten;
    
     Edit1 -> Text = edittext;
    ...
    


  • Perfekt, es funktioniert jetzt, nochma ein riesen DANKESCHÖN für die viele mühe 👍

    mfg
    Budala


Anmelden zum Antworten