Witam.

procedure TForm1.Button1Click(Sender: TObject);
var
  reg : TRegistry;
  NazwyKluczy  : TStringList;
  NazwyPodKluczy  : TStringList;
  i,  j : Integer;
  count,  count1 : Integer;
begin
  reg:=TRegistry.Create;
  NazwyKluczy := TStringList.Create;
  NazwyPodKluczy := TStringList.Create;
  reg.RootKey:=HKEY_LOCAL_MACHINE;
  reg.OpenKeyReadOnly('SYSTEM\CurrentControlSet\Enum\USB');
  reg.GetKeyNames(NazwyKluczy);
  count:=NazwyKluczy.Count;
  //reg.Free;
  //Memo1.Lines.AddStrings(NazwyKluczy);
    for i:=0 to count-1 do
      begin
        Memo1.Lines.Add(NazwyKluczy[i]);
        reg.OpenKeyReadOnly(NazwyKluczy[i]);
        reg.GetKeyNames(NazwyPodKluczy);
        count1:=NazwyPodKluczy.Count;
          for j:=0 to count1-1 do
            begin
              Memo1.Lines.Add(NazwyPodKluczy[j]);
              // ODCZYT WARTOŚCI KLUCZY ZAWARTYCH W PODKLUCZU NazwyPodKluczy[i]
            end;
      end;
   reg.Free;
end;
end.

Piszę program do odczytywania informacji o urządzeniach USB podłączonych do komputera, do odczytu wartości chciałem użyć funkcji

reg.ReadString('nazwa_klucza'); 

, zwraca mi ona puste wartości.

reg.jpg

Mam na myśli te klucze.


EDYCJA:

Już znalazłem problem, funkcja

reg.OpenKeyReadOnly('SYSTEM\CurrentControlSet\Enum\USB\' + NazwyKluczy[i]);

nie zmienia ścieżki na te foldery z pętli tylko pozostaje ciągle na SYSTEM\CurrentControlSet\Enum\USB\ może ktoś wie dlaczego??

Z funkcją ReadString jest wszystko w porządku jak ustawię klucz z ręki.

OK, doszedłem do tego. Po otwarciu klucza i wykonaniu na nim operacji trzeba go zamknąć funkcją CloseKey;


EDYCJA2:

Wiecie może jak sprawdzić status urządzenia, podłączone czy odłączone?