![]() |
Registry bei Windows 7 32bit mit Delphi 2009 auslesen
Hallo,
ich bin von Win XP auf Win 7 32bit umgezogen. Unter XP konnte ich die vorhandenen COM Ports mit folgenden Code aus der Registry lesen:
Code:
Unter Windows 7 liefert die Funktion GetValueNames eine leere Liste zurück.
reg := TRegistry.Create;
try reg.RootKey := HKEY_LOCAL_MACHINE; reg.OpenKey('hardware\devicemap\serialcomm', False); reg.GetValueNames(TempResult); for i := 0 to TempResult.Count - 1 do Result.Add(reg.Readstring(TempResult.strings[i])); reg.CloseKey finally reg.Free; TempResult.Free; end; Der Pfad und der Inhalt des Registry Schlüssels ist zu XP gleich geblieben. |
AW: Registry bei Windows 7 32bit mit Delphi 2009 auslesen
Ins blaue geraten: Unter XP hast du als Administrator gearbeitet unter Windows 7 bist du das nicht mehr. TRegistry.Create(...) öffnet den Schlüssel aber lesend und schreibend. Das schlägt unter Windows 7 fehl, weil du im Hive HKLM keine Schreibrechte hast. Eine entsprechende Fehlerbehandlung hätte wahrscheinlich den Fehler "Zugriff verweigert" zurückgegeben. Was dir auch gleich den Hinweis gegeben hätte, warum es nicht funktioniert.
|
AW: Registry bei Windows 7 32bit mit Delphi 2009 auslesen
Dem Konstrukor von TRegistry kann man den Parameter KEY_READ übergeben, damit das Objekt im Nur-Lesen-Modus erzeugt wird. Außerdem hat OpenKey einen Rückgabewert den man auswerten sollte.
|
AW: Registry bei Windows 7 32bit mit Delphi 2009 auslesen
Delphi-Quellcode:
procedure foo;
var reg: TRegistry; begin reg := TRegistry.Create; try reg.RootKey := HKEY_LOCAL_MACHINE; if reg.OpenKey('hardware\devicemap\serialcomm', False)then begin // ...; // ...; reg.CloseKey end else RaiseLastOSError; finally reg.Free; end; end; procedure TForm1.btn1Click(Sender: TObject); begin try foo; except on e: Exception do ShowMessage(e.Message); end; end; |
AW: Registry bei Windows 7 32bit mit Delphi 2009 auslesen
Wäre es hier nicht sicherer die dafür vorgesehene Api-funktion zu verwenden?
|
AW: Registry bei Windows 7 32bit mit Delphi 2009 auslesen
Zitat:
|
AW: Registry bei Windows 7 32bit mit Delphi 2009 auslesen
So geht es bei mir unter Vista 32 (kein Admin-Account):
Delphi-Quellcode:
[edit] BTW: Interessanter Artikel dazu:
procedure ListComPorts(ResultList: TStrings);
var reg: TRegistry; i: integer; TempResult: TStringlist; begin TempResult := TStringlist.Create; try reg := TRegistry.Create(KEY_READ); try reg.RootKey := HKEY_LOCAL_MACHINE; if reg.OpenKey('hardware\devicemap\serialcomm', False) then begin reg.GetValueNames(TempResult); for i := 0 to TempResult.Count - 1 do ResultList.Add(reg.Readstring(TempResult.strings[i])); reg.CloseKey; end; finally reg.Free; end; finally TempResult.Free; end; end; ![]() |
AW: Registry bei Windows 7 32bit mit Delphi 2009 auslesen
Verständnisfrage:
Wozu reg.CloseKey; wenn reg.OpenKey nicht funktioniert ? |
AW: Registry bei Windows 7 32bit mit Delphi 2009 auslesen
Wen meinst Du?
|
AW: Registry bei Windows 7 32bit mit Delphi 2009 auslesen
Alle...:-D
Wenn reg.CloseKey; nach einem missglückten reg.OpenKey aufgerufen wird - was passiert dann? Nichts??? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 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 by Thomas Breitkreuz