Windows Registry

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
hbr
Beiträge: 321
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Windows Registry

Beitrag von hbr »

Hallo Forum,
ich stoße beim auslesen der Registrie Schlüssel auf massive Probleme.

Schlüsse vom Type REG_DWORD (Hexadezimal) lassen sich nicht auslesen.

Beim der Nachfrage mit: Reg.GetDataType('SystemType') in HKEY_LOCAL_MACHINE ist bei den Erwähnten Schlüsseltypen (REG_DWORD (Hexadezimal)) das Ergebnis "rdUnknown".

Wie kann man solche Schlüssel nennoch lesen?

mfg
hbr

hbr
Beiträge: 321
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Windows Registry

Beitrag von hbr »

Hallo, hat hier niemand eine Idee?

Also beim Versuch den Schlüssel 'InstallDate' in HKLM = (Installationsdatum von Windows) auszulesen kommt immer eine Fehlermeldung.
Trotz vorhandenem Schlüssel, er ist da, will aber nicht ausgelesen werden.

An den Rechten licht es auch nicht.

Weiß niemand eine Lösung?

Gruß
hbr

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Windows Registry

Beitrag von Socke »

hbr hat geschrieben:Hallo, hat hier niemand eine Idee?
Vielleicht ist deine Idee auch zu kurz, als das jemand darauf aufbauen könnte. Ein wenig mehr Quelltext wäre wohl schon sinnvoll. Insbesondere wäre wohl ein vollständiger Registry-Pfad sinnvoll um dein Problem nachvollziehen zu können.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

hbr
Beiträge: 321
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Windows Registry

Beitrag von hbr »

Ok, kein Problem,
habe aber alles erwähnt und versucht mit den Verschiedensten Type auszulesen.
Immer das gleiche.
dennoch hier der Code:

Code: Alles auswählen

Function Reg_Lesen(HKEY,Schluessel,R_Name :String):String;
Var Reg : TRegistry;
begin
  Reg := TRegistry.Create(KEY_READ); //(KEY_READ OR $0100);
   If HKEY = 'USER' Then reg.RootKey := HKEY_CURRENT_USER;
   If HKEY ='MACHINE' Then reg.RootKey := HKEY_LOCAL_MACHINE;
  if Reg.OpenKey(Schluessel, false) then
      begin
        if Reg.ValueExists(R_Name) then
      begin
        Reg_Lesen := Reg.ReadString(R_Name);
        Reg.CloseKey;
       end;
      End Else Reg_Lesen := '';
    reg.free;
end;  
Hier der Inhalt von Schluessel: '\Software\Microsoft\Windows NT\CurrentVersion\'
R_Name ='InstallDate'
Ersucht mit DWord und ReadBinaryData
immer das gleiche, sobat der Reg-Schlüssel DWord HEXADEZIMAL hat gehts nicht.

gruß
Zuletzt geändert von Lori am Mo 8. Apr 2013, 16:01, insgesamt 1-mal geändert.
Grund: Bitte den richtigen Highlighter verwenden! Danke.

gsa
Beiträge: 9
Registriert: Fr 13. Jun 2008, 15:23
OS, Lazarus, FPC: Windows / Linux (FPC 3.2. fixes, Lazarus 3.0 fixes / trunk)

Re: Windows Registry

Beitrag von gsa »

hbr hat geschrieben:
Beim der Nachfrage mit: Reg.GetDataType('SystemType') in HKEY_LOCAL_MACHINE ist bei den Erwähnten Schlüsseltypen (REG_DWORD (Hexadezimal)) das Ergebnis "rdUnknown".
Unter dem Schlüssel 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion' gibt es keinen Wert 'SystemType'. Die Funktion Reg.DataType könnte also entweder eine Exception werfen oder "rdUnknown" zurückgeben, was es sie auch tut.

Reg.GetDatayType(R_Name) gibt "rdInteger" zurück, was bedeutet, dass du den Wert mit Reg.ReadInteger(R_Name) in eine Integer-Variable einlesen kannst. Da deine Funktion einen String zurückgibt, musst du die Integer-Variable z.B. mit IntToStr in einen solchen umwandeln.

Gruß Gerd

hbr
Beiträge: 321
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Windows Registry

Beitrag von hbr »

Oh Vielen Dank GSA,

Habe jetzt meie Funktion mit 'if GetDataType(R_Name) = rdInteger then'... erweiter.
Und es Funktioniert! Vielen Dank.

Seltsam finde ich nur, dass ich das mit Integer vorher auch schon versucht hatte.


Gruß
hbr

Antworten