![]() |
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??? |
AW: Registry bei Windows 7 32bit mit Delphi 2009 auslesen
Ein Blick in die Hilfe bringt Erstaunliches zu Tage:
Zitat:
|
AW: Registry bei Windows 7 32bit mit Delphi 2009 auslesen
Wer will, kann auch noch
![]() |
AW: Registry bei Windows 7 32bit mit Delphi 2009 auslesen
Hallo,
danke für die zahlreichen Antworten. Ich werde das gleich mal ausprobieren. Version 1.0 ist leider schon rum ums Eck. Bin jetzt bei 5.0 |
AW: Registry bei Windows 7 32bit mit Delphi 2009 auslesen
Create mit KEY_READ ausführen, dann klapps auch wieder mit Windows 7
Code:
TRegistry.Create(KEY_READ);
|
AW: Registry bei Windows 7 32bit mit Delphi 2009 auslesen
Siehe #3 und #7.
|
Dieses Thema wurde am "25. Sep 2011, 20:22 Uhr" von "MrSpock" aus dem Forum "Betriebssysteme" in das Forum "Win32/Win64 API (native code)" verschoben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 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