Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 092

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
как получить список всех ключей реестра в Tstrings чтоб получять строки типа HKEY_LOCAL_MACHINE\SOFTWARE\ODBC

зы Именно ключей, а не параметров.
ключи отображаются в regedit'e как папки.

Gooddy Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Gooddy (статус: 3-ий класс)
Вопрос отправлен: 5 ноября 2007, 21:41
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Dron

Здравствуйте, Wallpk!
Изобретать велосипед не придётся, всё сделано до нас. Следует воспользоваться стандартным средством - модулем Registry. Для начала подключаем модуль в uses. Затем потребуется создать объект типа TRegistry. А дальше всё просто - у объекта есть метод GetKeyNames, который и делает листинг всех ключей открытого раздела. Пример:

procedure TForm1.Button1Click(Sender: TObject);
var Reg: TRegistry; Keys: TStrings;
begin
  Keys:=TStringList.Create;
  Reg:=TRegistry.Create;
  Reg.RootKey:=HKEY_USERS;
  Reg.OpenKey('.DEFAULT\',False);
  Reg.GetKeyNames(Keys);
  Reg.Free;
  Memo1.Lines:=Keys;
  Keys.Free;
end;
В данном случае в Memo1 будет выведен список всех ключей ветки HKEY_USERS\.DEFAULT\.

Ответ отправил: Dron (статус: Студент)
Время отправки: 5 ноября 2007, 22:10
Оценка за ответ: 3

Комментарий к оценке: eeee

Ответ #2. Отвечает эксперт: Вадим К

Здравствуйте, Wallpk!
Для этого вам прийдётся познакомиться с рекурсией и кодом, приведённым в приложении. Предупреждаю сразу - работает "немного" медленно. Ознакомившись подробней с кодом, другой вопрос думаю сможете решить сами:)

Приложение:
  1. uses Registry;
  2.  
  3. function RootToString(Root:HKEY):string;
  4. begin
  5. case root of
  6. HKEY_CLASSES_ROOT: result := 'HKEY_CLASSES_ROOT';
  7. HKEY_CURRENT_USER: result := 'HKEY_CURRENT_USER';
  8. HKEY_LOCAL_MACHINE: result := 'HKEY_LOCAL_MACHINE';
  9. HKEY_USERS: result := 'HKEY_USERS';
  10. HKEY_CURRENT_CONFIG: result := 'HKEY_CURRENT_CONFIG';
  11. else
  12. result := '';
  13. end;
  14.  
  15. end;
  16.  
  17. procedure MyReqursive(Root:HKEY;regpath:String; sl:TStrings);
  18. var r:TRegistry;
  19. i:integer;
  20. tl:TStringList;
  21. s:string;
  22. begin
  23. r := TRegistry.Create;
  24. try
  25. r.RootKey := Root;
  26. r.OpenKeyReadOnly(regpath);
  27. tl := TStringList.create;
  28. try
  29. r.GetKeyNames(tl);
  30. for i := 0 to tl.count - 1 do
  31. begin
  32. s := regpath+''+tl[i];
  33. sl.add(RootToString(root)+s);
  34. MyReqursive(root, s, sl);
  35. end;
  36. finally
  37. tl.Free;
  38. end;
  39. finally
  40. r.Free;
  41. end;
  42.  
  43. end;
  44.  
  45. procedure TForm1.Button1Click(Sender: TObject);
  46. var sl:TStringList;
  47. begin
  48. sl := TStringList.create;
  49. try
  50. Memo1.Lines.Clear;
  51. MyReqursive(HKEY_CLASSES_ROOT,'',sl);
  52. MyReqursive(HKEY_CURRENT_USER,'',sl);
  53. MyReqursive(HKEY_LOCAL_MACHINE,'',sl);
  54. MyReqursive(HKEY_USERS,'',sl);
  55. MyReqursive(HKEY_CURRENT_CONFIG,'',sl);
  56. memo1.Lines.AddStrings(sl);
  57. finally
  58. sl.free;
  59. end;
  60. end;


Ответ отправил: Вадим К (статус: Академик)
Время отправки: 5 ноября 2007, 22:58
Оценка за ответ: 5

Комментарий к оценке: супер.

Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 5 ноября 2007, 22:02; участников в обсуждении: 2.
Dron

Dron (статус: Студент), 5 ноября 2007, 21:53 [#1]:

Объясните на конкретном примере, что вам нужно.
У HKEY_USERS ключи такие (на моей машине):
.DEFAULT
S-1-5_18
S-1-5_19
S-1-5_19_Classes

Вы их хотите получить в TStrings?

А вот у .DEFAULT\Console под-ключей нет - там только значения. Что вам нужно из этой ветки?
С уважением.
Gooddy

Gooddy (статус: 3-ий класс), 5 ноября 2007, 22:02 [#2]:

мне нужны ключи и подключи. их я хочу получить. причём все и из всех HKEY_*
Чисти код! Чисти код! Чисти код!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 29 июня 2017, 13:52
Выполнено за 0.03 сек.
Рейтинг@Mail.ru