Registry auslesen funktioniert nicht

Antworten
Vielleichtmann
Beiträge: 20
Registriert: So 13. Jan 2013, 16:53

Registry auslesen funktioniert nicht

Beitrag von Vielleichtmann »

Hallo,
ich glaube, ich stehe gerade irgendwie auf dem Schlauch. Warum funktioniert diese Methode nicht, die Registry auszulesen. Ich möchte testweise den Wert von "HKEY_LOCAL_MACHINE\SOFTWARE\Lazarus\Capabilities\ApplicationName" auslesen, dieser müsste eigentlich "Lazarus IDE" sein, aber wenn ich den Code ausführe, bekomme ich einen leeren Wert zurück. Woran könnte das liegen?

Code: Alles auswählen

 
procedure TForm1.RegistryAuslesen;
var Registry: TRegistry;
    Test: string;
begin
  Registry:=TRegistry.Create;
  {Testweise auslesen von HKEY_LOCAL_MACHINE\SOFTWARE\Lazarus\Capabilities\ApplicationName}
  Registry.RootKey:=HKEY_LOCAL_MACHINE;
  Registry.OpenKey('SOFTWARE\Lazarus\Capabilities', true);
 
  Test:=Registry.ReadString('ApplicationName');
 
  ShowMessage(Test);
  {"Schließen" der Registry}
  Registry.CloseKey;
  Registry.free;
  end;    
 
Dankeschön :-)
Windows 7, Lazarus v. 1.0.6 :-)

Benutzeravatar
theo
Beiträge: 10921
Registriert: Mo 11. Sep 2006, 19:01

Re: Registry auslesen funktioniert nicht

Beitrag von theo »

Bei mir funktioniert dein Code.
Habe es allerdings unter Virtualbox auf Win2k mit Lazarus 0.9.31 r34308 FPC 2.5.1 i386-win32-win32/win64 getestet.

wp_xyz
Beiträge: 5191
Registriert: Fr 8. Apr 2011, 09:01

Re: Registry auslesen funktioniert nicht

Beitrag von wp_xyz »

Arbeitest du mit 64-Bit-Windows? Wenn ja, dann liegen die Einträge von 32-bit Programmen an anderer Stelle, ich kriege die Details aber jetzt nicht zusammen.

Vielleichtmann
Beiträge: 20
Registriert: So 13. Jan 2013, 16:53

Re: Registry auslesen funktioniert nicht

Beitrag von Vielleichtmann »

wp_xyz hat geschrieben:Arbeitest du mit 64-Bit-Windows? Wenn ja, dann liegen die Einträge von 32-bit Programmen an anderer Stelle, ich kriege die Details aber jetzt nicht zusammen.
Der Pfad ist ja in regedit.exe vorhanden, also müsste es ja eigentlich auch auf 64 Bit-Windows laufen, oder?
Windows 7, Lazarus v. 1.0.6 :-)

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Registry auslesen funktioniert nicht

Beitrag von mschnell »

Vielleichtmann hat geschrieben: "HKEY_LOCAL_MACHINE\SOFTWARE\Lazarus\Capabilities\ApplicationName" auslesen, ...
Warum sollte Lazarus in der Registry stehen ? Wirklich notwendig ist das nicht.

-Michael

wp_xyz
Beiträge: 5191
Registriert: Fr 8. Apr 2011, 09:01

Re: Registry auslesen funktioniert nicht

Beitrag von wp_xyz »

Der Pfad ist ja in regedit.exe vorhanden
Wenn ich mich recht an den älteren Artikel in der c't erinnere, wird das aus Kompatibilitätsgründen von regedit so angezeigt, die Einträge stehen aber anderswo - das ist ein Riesenchaos. Google einfach mal nach WOW und mach dich selber schlau.
Warum sollte Lazarus in der Registry stehen ? Wirklich notwendig ist das nicht.
Das ist richtig, aber wenn man Lazarus aus dem offiziellen Installationspackage installiert und die entsprechende Rückfrage bejaht, werden einige Lazarus-Dateitypen mit Lazarus verknüpft. Warum man das mit dem im ersten Posting genannten Schlüssel macht und nicht auf die "offizielle" Art und Weise, weiß ich nicht.

wp_xyz
Beiträge: 5191
Registriert: Fr 8. Apr 2011, 09:01

Re: Registry auslesen funktioniert nicht

Beitrag von wp_xyz »

So geht's bei mir unter Win7-64bit (mit Lazarus-32bit Anwendung) - siehe z.B. http://stackoverflow.com/questions/2863 ... s-7-64-bit:

Code: Alles auswählen

 
procedure TForm1.RegistryAuslesen;
var Registry: TRegistry;
    Test: string;
begin
  Registry:=TRegistry.Create(KEY_READ OR $0100);   
  {Testweise auslesen von HKEY_LOCAL_MACHINE\SOFTWARE\Lazarus\Capabilities\ApplicationName}
  Registry.RootKey:=HKEY_LOCAL_MACHINE;
  Registry.OpenKey('\SOFTWARE\Lazarus\Capabilities', false);
 
  Test:=Registry.ReadString('ApplicationName');
 
  ShowMessage(Test);
  {"Schließen" der Registry}
  Registry.CloseKey;
  Registry.free;
end;  
 
Aber Achtung: Wenn dein Programm auch unter 32-Bit-Windows laufen soll, muss das $0100 in der Create-Anweisung wieder raus...

Vielleichtmann
Beiträge: 20
Registriert: So 13. Jan 2013, 16:53

Re: Registry auslesen funktioniert nicht

Beitrag von Vielleichtmann »

wp_xyz hat geschrieben: Aber Achtung: Wenn dein Programm auch unter 32-Bit-Windows laufen soll, muss das $0100 in der Create-Anweisung wieder raus...
Danke :-)
Ist erstmal eh nur für mich. Aber wie mache ich das dann ohne das $0100?

Edit: Und wenn mir dann noch jemand helfen könnte, wie ich alle Schlüssel eines Ordners in der Registry auslesen kann, wär das natürlich noch ideal.
Windows 7, Lazarus v. 1.0.6 :-)

wp_xyz
Beiträge: 5191
Registriert: Fr 8. Apr 2011, 09:01

Re: Registry auslesen funktioniert nicht

Beitrag von wp_xyz »

Aber wie mache ich das dann ohne das $0100?
Na, einfach weglassen:

Code: Alles auswählen

 
Registry:=TRegistry.Create(KEY_READ);  
 
In dem von mir zitierten Link gibt es auch noch eine Routine, die erkennt ob 64-bit oder 32-bit Windows läuft. Je nachdem, musst du dann das $0100 weglassen (bei 32-bit) oder anhängen (bei 64-bit).

Antworten