Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Registry key auslesen O_o

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
01.06.2006, 22:13 Uhr
~Rainbox
Gast



Code:
lpcbValue
    [in, out] A pointer to a variable that specifies the size of the buffer pointed to by the lpValue parameter, in bytes. When the function returns, this variable contains the size of the data copied to lpValue, including any terminating null characters.



steht inner MSDN...wenn ich jetzt den letzten Parameter deines bsps in long umwandle(mit DWORD kommt eine Fehlermeldung), funktioniert es, aber der Wert den ich bekomme sieht a bissl komisch aus, bzw ändert sich nie, auch wenn ich den Wert inner Registry änder...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
01.06.2006, 22:23 Uhr
Spacelord
Hoffnungsloser Fall


Ich schreib dein Beispiel gerade passend,da sind ja etliche brutale Fehler drin.
Dauert noch nen paar Minuten.

Gruss Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
01.06.2006, 22:48 Uhr
~Rainbox
Gast


Oke das ist echt nett, danke...dachte ich mir schon das ich es mal wieder übertreibe , hoffe ich lerne daraus.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
01.06.2006, 23:05 Uhr
Spacelord
Hoffnungsloser Fall


Also,auf die Schnelle dahingeklatscht.
Die Rueckgabewerte könnten besser überprüft werden und anstatt mit Binärdaten hab ich hier jetzt mit DWORD´s getestet um das Ganze nicht zu überfrachten.
Wenn du später mal mit Binärdaten arbeitest solltest du immer den Size Wert überprüfen in den EnumValue schreibt und überprüfen ob die Anzahl der geschriebenen Bytes genauso groß ist wie die Grösse des Puffers.
Sollte das so sein war dein Puffer warscheinlich zu klein und du solltest RegEnumValue/QueryValue dann nochmal mit nem grösseren Puffer aufrufen.

C++:
#include <windows.h>
#include <iostream>

using namespace std;


int main()
{
    LONG lResult;
    HKEY hKey;
    TCHAR lpSubKey[]= "MainKey";// ohne \\ !
    TCHAR ValueNameBuffer[512];
    DWORD lpcSubKeys=0; //richtige DWORDS !!
    DWORD lpcValues=0;  //nicht nur Zeiger auf DWORDS die auf kein DWORD zeigen!!

    //ÖFFNEN
    lResult = RegOpenKeyEx(HKEY_CURRENT_USER,lpSubKey,0,KEY_READ,&hKey);//KEY_READ benoetigt! impliziert KEY_QUERY_VALUE
    if(lResult == ERROR_SUCCESS)
    {

        //SubKey Anzahl holen...          
        lResult = RegQueryInfoKey(
                          hKey,//dein HKEY das du gerade geöffnet hast benutzen!
                          NULL,
                          NULL,
                          0,
                          &lpcSubKeys,
                          NULL,
                          NULL,
                          &lpcValues,
                          NULL,
                          NULL,
                          NULL,
                          NULL);
        if(lResult ==ERROR_SUCCESS)
        {
            cout<<"Subkeys: "<<lpcSubKeys<<endl;
            cout<<"Values: " <<lpcValues<<endl;

            size_t idx = 0;
            while(idx < lpcValues)
            {
                //Der Einfachheit halber habe ich mit DWORD´s getestet
                DWORD Type;
                DWORD NameBufferSize = 512;
                DWORD PufferSize = sizeof(DWORD);
                DWORD Data;//fuer binaere Daten nen geeigneten BYTE Puffer anlegen
                DWORD DataSize=sizeof(DWORD);

                RegEnumValue(
                           hKey,// HKEY benutzen!
                           idx, // Index des Schlüssels,dafür hast du RegQueryInfoKey benutzt.Um zu wissen wieviele Werte es sind
                           ValueNameBuffer,
                           &NameBufferSize,
                           0,
                           &Type,
                           (LPBYTE)&Data,
                           &DataSize
                           );
        
                ++idx;
                cout<<"Name des Wertes :"<<ValueNameBuffer<<endl;
                switch(Type)
                {
                case REG_BINARY:
                    {
                        //den potentiellen BYTE Puffer geeignet anzeigen
                        //würde hier jetzt den Rahmen sprengen
                        cout<<"Es ist ein Binaerwert...\tder Wert ist:...."<<endl;
                        break;
                    }
                case REG_DWORD:
                    {
                        cout<<"Es ist ein DWORD...\tder Wert ist:"<<Data<<endl;
                        break;
                    }
                    //usw.....

                }

            }
        }
        else
            cout<<"Konnte keine Informationen auslesen."<<endl;

        //Schluessel schliessen
        RegCloseKey(hKey);
      }
      else
          cout<<"Konnte Schluessel nicht oeffnen"<<endl;

    return 0;
}




Gruss Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
02.06.2006, 03:22 Uhr
~Rainbox
Gast


Hi nochmal, danke das klappt ja perfekt....vielen dank für die Mühe...ich werde mir das mal genauer angucken, meine Fehler habe ich teilweise schon bemerkt...habe es auch gleich mal mit RegEnumKeyEx() probiert, hat nicht geklappt. aber mit RegEnumKey() funktioniert es, die SubKey Namen zu bekommen.
Ich werde morgen noch ein bissl damit rumexperimentieren, fals noch Fragen auftretten werde ich mich sicher melden ^^...danke auf jedenfall
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: