Registry 2 Schlüssel auslesen [gelöst]

Antworten
VB_Lazarus
Beiträge: 99
Registriert: Do 23. Dez 2010, 19:10
OS, Lazarus, FPC: Windows 10/11 32/64bit, L 3.2.0 32/64bit, FPC 3.2.2 32/64bit

Registry 2 Schlüssel auslesen [gelöst]

Beitrag von VB_Lazarus »

Hallo zusammen,

habe wieder einmal ein Problem, bzw. bräuchte einen denkanstoß.
Ich möchte in der Registry 2 verschiedene Schlüssel auslesen.
Anhand der ausgelesene Werte will ich prüfen ob ein bestimmter ODBC Treiber vorhanden ist.
Es wird der 32bit Wert und der 64bit Wert ausgelesen.

Code: Alles auswählen

function TfrmMain.ODBCTreiberPruefen() : boolean;
var
    Reg32Liste : TStrings;
    Reg64Liste : TStrings;
    Reg32Text : String;
    Reg64Text : String;
    ODBC32Text : String;
    ODBC64Text : String;
    reg: TRegistry;
begin
  try

   ODBC32Vorhanden := false;
   ODBC64Vorhanden := false;

   ODBC32Text := 'SOFTWARE\WOW6432Node\ODBC\ODBCINST.INI\ODBC Drivers';
   ODBC64Text := 'SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers';

   reg := TRegistry.Create(KEY_READ);

   Reg64Liste:=TStringList.Create;
   reg.RootKey := HKEY_LOCAL_MACHINE;
   if reg.OpenKeyReadOnly(ODBC64Text) then
     begin
       reg.GetValueNames(Reg64Liste);
       Reg64Text := Reg64Liste.Text;
       if Pos(DRIVER64, Reg64Text) <> 0 then ODBC64Vorhanden := true;
     end;
    reg.Free;
    Reg64Liste.Free;

   Reg32Liste:=TStringList.Create;
   reg := TRegistry.Create(KEY_READ);
   reg.RootKey := HKEY_LOCAL_MACHINE;
   if reg.OpenKeyReadOnly(ODBC32Text) then
     begin
       reg.GetValueNames(Reg32Liste);
       Reg32Text := Reg32Liste.Text;
       if Pos(DRIVER32, Reg32Text) <> 0 then ODBC32Vorhanden := true;
     end;
   Reg32Liste.Free;

  finally
    reg.Free;
  end;

end;       
Es wird aber nur der 1. Wert ausgelsen.
Vielleicht sieht irgendjemand den Fehler in meinem Code.
Danke.
Grüße
Zuletzt geändert von VB_Lazarus am Mo 20. Mai 2024, 09:48, insgesamt 1-mal geändert.

Benutzeravatar
Ally
Beiträge: 283
Registriert: Do 11. Jun 2009, 09:25
OS, Lazarus, FPC: Win und Lazarus Stable release
CPU-Target: x64

Re: Registry 2 Schlüssel auslesen

Beitrag von Ally »

Hallo VB_Lazarus,

das angehängten Beispiel liefert die Treiberlisten zurück.
Die du dann auswerten kannst.

Gruß Roland
Dateianhänge
Beispiel.zip
(5.66 KiB) 65-mal heruntergeladen

VB_Lazarus
Beiträge: 99
Registriert: Do 23. Dez 2010, 19:10
OS, Lazarus, FPC: Windows 10/11 32/64bit, L 3.2.0 32/64bit, FPC 3.2.2 32/64bit

Re: Registry 2 Schlüssel auslesen

Beitrag von VB_Lazarus »

Hallo Roland,
danke, für das Beispiel.
So ein Beispiel habe ich auch aus dem englischen Forum.
Daraus habe ich meinen Code gebaut und leider bekomme ich es nicht hin, das beide Auflistungen der Registry in einer Procedure ausgelesen werden.
Warum auch immer, es wird nur eine Liste ausgelsen.
Gruß
Carsten

djdhg
Beiträge: 18
Registriert: Mo 8. Apr 2013, 17:12
OS, Lazarus, FPC: Win11, Debian 12.5, Lazarus: 2.2.6, FPC: 3.2.2
CPU-Target: 64Bit

Re: Registry 2 Schlüssel auslesen

Beitrag von djdhg »

Moin.

Vllt. hilft das als Denkanstoß?
https://wiki.freepascal.org/fcl-registr ... stry_views

Dein Code funktioniert bei mir ohne Probleme, sobald ich folgende Variablen noch definiert hatte:

Code: Alles auswählen

DRIVER64, DRIVER32 : String;
ODBC32Vorhanden, ODBC64Vorhanden : Boolean;
Lg

VB_Lazarus
Beiträge: 99
Registriert: Do 23. Dez 2010, 19:10
OS, Lazarus, FPC: Windows 10/11 32/64bit, L 3.2.0 32/64bit, FPC 3.2.2 32/64bit

Re: Registry 2 Schlüssel auslesen

Beitrag von VB_Lazarus »

Hi,
danke, für den Link.
Ich habe meinen Fehler gefunden.
Der Link von dir war sehr hilfreich.
Ich habe eine 32bit Anwendung die auch als 64bit Anwendung compiliert werden kann.
Der ODBC Treiber von 64bit, kann nur mit einer 64bit Anwendung ausgelesen (Hinweis Link von dir) werden.
Was auch Sinn macht.
Danke, für deine Unterstützung.
Gruß
Carsten

Antworten