![]() |
Registry auslesen funktioniert nicht
Hallo,
ich habe auch schon drüben im Lazarusforum gefragt, aber doppelt hält ja besser :-) 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?
Delphi-Quellcode:
Dankeschön :-)
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; |
AW: Registry auslesen funktioniert nicht
Darfst Du das denn (Rechtemäßig)?
|
AW: Registry auslesen funktioniert nicht
Zitat:
Edit: Außerdem geht es später darum, die installierten Programme anzuzeigen und das sollte wirklich in Ordnung sein :D |
AW: Registry auslesen funktioniert nicht
Die Methode TRegistry.OpenKey öffnet einen Schlüssel immer mit Schreibrechten, sofern man dem nicht vorbeugt. In HKLM dürfen nur Admins schreiben und daraus ergibt sich, dass Furtbichler wohl richtig liegt.
MfG Dalai |
AW: Registry auslesen funktioniert nicht
Zitat:
Aber wenn man das Programm normal startet, dann hat es in dem HKLM Zweig nur Leserechte und keine Schreibrechte. Dein Code versucht aber, mit Schreibrechten auf die Registry zuzugreifen. Schau mal was es da noch so gibt: ![]() |
AW: Registry auslesen funktioniert nicht
Zitat:
Mit OpenKeyReadOnly bekomme ich allerdings auch kein Ergebnis, ich kriege nur ein false zurück. |
AW: Registry auslesen funktioniert nicht
Wenn ich die Hilfe richtig verstanden habe, dann geht
Delphi-Quellcode:
erst mit vollen Rechten in den Schlüssel und schaltet dann wieder einen Gang auf
OpenKeyReadOnly
Delphi-Quellcode:
herunter.
KEY_READ
Wenn das Programm nicht mit Administratorrechten läuft würde ich besser erst die . ![]() Wenn ich mich richtig erinnere kann man als Standardbenutzer schon etwas in HKLM herumwühlen, aber manche Order/Schlüssel sind absolut tabu, da darf auch nicht mehr gelesen werden... |
AW: Registry auslesen funktioniert nicht
Zitat:
|
AW: Registry auslesen funktioniert nicht
Zitat:
|
AW: Registry auslesen funktioniert nicht
Zitat:
|
AW: Registry auslesen funktioniert nicht
Du musst die Registry Instanz so instantiieren:
Delphi-Quellcode:
Dann geht es. Habs eben getestet (ich hab Win7 64bit).
Const
KEY_WOW64_64KEY=$100; ... Registry:=TRegistry.Create(KEY_READ OR KEY_WOW64_64KEY); |
AW: Registry auslesen funktioniert nicht
Zitat:
|
AW: Registry auslesen funktioniert nicht
Da ich kein Lazarus habe, klinke ich mich hier aus.
Na jedenfalls konnte ich dein Problem wenigstens bei mir unter Delphi nachvollziehen... Tut mir leid. |
AW: Registry auslesen funktioniert nicht
Zitat:
Delphi-Quellcode:
So läuft es zumindest schonmal unter 64-Bit. Trotzdem danke :-)
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; 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. |
AW: Registry auslesen funktioniert nicht
![]() Ich vermute, das oder zumindest etwas Ähnliches ist auch unter Lazarus verfügbar. |
AW: Registry auslesen funktioniert nicht
Ein Ressourcenschutzblock und die Auswertung des Rückgabewertes von OpenKey täte deinen Code auch gut.
Delphi-Quellcode:
procedure TForm1.RegistryAuslesen;
var Registry: TRegistry; Test: string; begin Registry := TRegistry.Create(KEY_READ OR $0100); try {Testweise auslesen von HKEY_LOCAL_MACHINE\SOFTWARE\Lazarus\Capabilities\ApplicationName} Registry.RootKey:=HKEY_LOCAL_MACHINE; if Registry.OpenKey('\SOFTWARE\Lazarus\Capabilities', false) then begin Test := Registry.ReadString('ApplicationName'); ShowMessage(Test); {"Schließen" der Registry} Registry.CloseKey; end; finally Registry.free; // oder FreeAndNil(Registry) end; end; |
AW: Registry auslesen funktioniert nicht
Zitat:
Zitat:
|
AW: Registry auslesen funktioniert nicht
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz