Announcement

Collapse
No announcement yet.

Registry-Eintrag lesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Registry-Eintrag lesen

    <html>

    <head>
    <meta http-equiv="Content-Type"
    content="text/html; charset=iso-8859-1">
    <meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
    <title>Normale Seite ohne Titel</title>
    </head>

    <body bgcolor="#FFFFFF">

    <p>Wie kann man einen Registry-Eintrag mit den WIN32 API
    Funktionen auslesen ? Welche Funktion steht analog zu <strong>ReadString</strong>
    ? Ich finde die Funktionen <em>RegEnumKey RegEnumKeyEx
    RegEnumValue RegLoadKey RegQueryInfoKey RegQueryValue</em> und <em>RegQueryValueEx</em>,
    aber alle scheinen mir zu kompliziert für so eine einfache
    Aufgabe. In C++ Builder funktioniert es ganz easy:</p>

    <pre>
    Registry-&gt;RootKey=HKEY_CURRENT_USER;
    if(Registry-&gt;OpenKey(&quot;Software\\Microsoft\\Windows\\Cu rrentVersion\\Internet Settings&quot;,false))
    {
    ShowMessage(Registry-&gt;ReadString(&quot;ProxyServer&quot.c_str());
    Registry-&gt;CloseKey();
    }
    </pre>
    </body>
    </html>
    Günther

  • #2
    Hi Günter,

    So sollte es funktionieren ;-). Du kannst damit auch auf gleiche Art z.B. Binärwerte auslesen.

    <em>void __fastcall TForm1::Button1Click(TObject *Sender)<br>
    {<br>
    char *wert;<br>
    HKEY hRegRoot = HKEY_CURRENT_USER; //Rootkey definieren<br>
    HKEY hRegKey; //Benötigt für Zugriff auf Schlüssel<br>
    DWORD dwType = REG_EXPAND_SZ;<br>
    DWORD cbData = 255;<br>
    DWORD retCode; //Returncode<br>

    char *v_name = "ProxyServer"; //Wert-Name<br>
    unsigned char * v_val=(unsigned char*)malloc(255);<br>

    retCode = RegOpenKeyEx(hRegRoot,"Software\\Microsoft\\Window s\\CurrentVersion\\Internet Settings",0,KEY_READ, &hRegKey); //Schlüssel öffnen<br>
    retCode = RegQueryValueEx(hRegKey,v_name,NULL,&dwType,(unsig ned char*)v_val,&cbData); //Schlüssel lesen<br>

    wert= v_val;<br>
    Label1->Caption=AnsiString(wert);<br>
    }</em>

    Könntest Du mir ein Beispiel zeigen, wie ich Binärwerte aus der Registry lesen kann (mit TRegistry)? Es klappt sonst eigentlich mit allen Werten, aber bei den Binären, da mache ich immer irgend etwas falsch! Merci.

    Lieber Gruss - Bori

    Comment


    • #3
      Hi Boris, vielen Dank für die verspätete Antwort. Natürlich habe ich es inzwischen sowohl mit API-Funktionen als auch mit der TRegistry hinbekommen. Allerdings: Bisher hatte ich nur Strings benötigt. Wie es mit Binärdaten funktioniert kann ich nur vermuten:

      Um herauszufinden, um welchen Datentyp es sich handelt gibt es die TRegistry-Methode GetDataType. Bei RegQueryValueEx müßte dieser in &dwType zurückgeliefert werden.

      Dann gibt es TRegistry::GetDataInfo, wo man eine Struktur zurückerhält die wieder den Datentyp und zusätzlich DataSize enthält. DataSize dürfte auch bei RegQueryValueEx in &cbData zurückgeliefert werden.

      Bei den Binärdaten mußt Du die Datenstruktur kennen um überhaupt etwas damit anfangen zu können. Wenn Du die nicht kennst, kannst Du den Datentyp unsigned char * verwenden, darfst diesen aber nicht wie einen String behandeln weil eine Null mittendrin sein darf und keine Null als Abschluß erforderlich ist. Du mußt also bei RegQueryValueEx zuerst die Größe abfragen, dann den Speicher reservieren und dann noch einmal mit RegQueryValueEx die gesamten Daten auslesen. TRegistry hat zum Auslesen der Daten die Methode ReadBinaryData.

      Viel Erfolg beim Ausprobieren - Günthe
      Günther

      Comment

      Working...
      X