А в \SYSTEM\ControlSet001\Enum\USBSTOR точно есть ключи? Потому как во втором коде проход идет по ветке \SYSTEM\ControlSet001\
Добавлено @ 10:44 Кстати, у меня первый вариант вполне себе нормально отработал. Тольк не понятно зачем там организован цикл, а так же не ясно, зачем там строка 7, если GetKeyNames все-равно зачищает listbox.
| Код | procedure TRegistry.GetKeyNames(Strings: TStrings); var Len: DWORD; I: Integer; Info: TRegKeyInfo; S: string; begin Strings.Clear; { <-- очищение!!! } if GetKeyInfo(Info) then begin SetString(S, nil, Info.MaxSubKeyLen + 1); for I := 0 to Info.NumSubKeys - 1 do begin Len := Info.MaxSubKeyLen + 1; RegEnumKeyEx(CurrentKey, I, PChar(S), Len, nil, nil, nil, nil); Strings.Add(PChar(S)); end; end; end;
|
Не понятно зачем проверка KeyExists, если OpenKey возвращает найден ли ключ или нет. Плюс оформление кода ужасное. В общем, вот так будет лучше (и работает).
| Код | uses Registry;
procedure TForm1.Button1Click(Sender: TObject); var Reg: TRegistry; begin Reg := TRegistry.Create; try Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\SYSTEM\ControlSet001\Enum\USBSTOR', False) then Reg.GetKeyNames(ListBox1.Items); finally Reg.Free; end; end; |
|