Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Registry bei Windows 7 32bit mit Delphi 2009 auslesen (https://www.delphipraxis.net/163094-registry-bei-windows-7-32bit-mit-delphi-2009-auslesen.html)

Alex.P 15. Sep 2011 11:40


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:
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;
Unter Windows 7 liefert die Funktion GetValueNames eine leere Liste zurück.
Der Pfad und der Inhalt des Registry Schlüssels ist zu XP gleich geblieben.

Luckie 15. Sep 2011 11:45

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.

Andreas L. 15. Sep 2011 11:47

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.

Luckie 15. Sep 2011 11:50

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;

SirThornberry 15. Sep 2011 11:51

AW: Registry bei Windows 7 32bit mit Delphi 2009 auslesen
 
Wäre es hier nicht sicherer die dafür vorgesehene Api-funktion zu verwenden?

Luckie 15. Sep 2011 11:53

AW: Registry bei Windows 7 32bit mit Delphi 2009 auslesen
 
Zitat:

Zitat von SirThornberry (Beitrag 1124523)
Wäre es hier nicht sicherer die dafür vorgesehene Api-funktion zu verwenden?

Wenn es die gibt sicher. Welche wäre denn das?

DeddyH 15. Sep 2011 12:23

AW: Registry bei Windows 7 32bit mit Delphi 2009 auslesen
 
So geht es bei mir unter Vista 32 (kein Admin-Account):
Delphi-Quellcode:
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;
[edit] BTW: Interessanter Artikel dazu: http://www.codeproject.com/KB/system...enum_fifo.aspx, aber ganz ohne die Registry kommt man wohl auch dort nicht aus, sofern meine bescheidenen C++-Kenntnisse ausreichen. [/edit]

hathor 15. Sep 2011 12:42

AW: Registry bei Windows 7 32bit mit Delphi 2009 auslesen
 
Verständnisfrage:

Wozu reg.CloseKey; wenn reg.OpenKey nicht funktioniert ?

DeddyH 15. Sep 2011 12:43

AW: Registry bei Windows 7 32bit mit Delphi 2009 auslesen
 
Wen meinst Du?

hathor 15. Sep 2011 12:49

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 03:04 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz