|
Вопрос # 1 092/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
как получить список всех ключей реестра в Tstrings чтоб получять строки типа HKEY_LOCAL_MACHINE\SOFTWARE\ODBC
зы Именно ключей, а не параметров.
ключи отображаются в regedit'e как папки.
 |
Вопрос задал: 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!
Для этого вам прийдётся познакомиться с рекурсией и кодом, приведённым в приложении. Предупреждаю сразу - работает "немного" медленно. Ознакомившись подробней с кодом, другой вопрос думаю сможете решить сами:)
Приложение: Переключить в обычный режим- uses Registry;
-
- function RootToString(Root:HKEY):string;
- begin
- case root of
- HKEY_CLASSES_ROOT: result := 'HKEY_CLASSES_ROOT';
- HKEY_CURRENT_USER: result := 'HKEY_CURRENT_USER';
- HKEY_LOCAL_MACHINE: result := 'HKEY_LOCAL_MACHINE';
- HKEY_USERS: result := 'HKEY_USERS';
- HKEY_CURRENT_CONFIG: result := 'HKEY_CURRENT_CONFIG';
- else
- result := '';
- end;
-
- end;
-
- procedure MyReqursive(Root:HKEY;regpath:String; sl:TStrings);
- var r:TRegistry;
- i:integer;
- tl:TStringList;
- s:string;
- begin
- r := TRegistry.Create;
- try
- r.RootKey := Root;
- r.OpenKeyReadOnly(regpath);
- tl := TStringList.create;
- try
- r.GetKeyNames(tl);
- for i := 0 to tl.count - 1 do
- begin
- s := regpath+''+tl[i];
- sl.add(RootToString(root)+s);
- MyReqursive(root, s, sl);
- end;
- finally
- tl.Free;
- end;
- finally
- r.Free;
- end;
-
- end;
-
- procedure TForm1.Button1Click(Sender: TObject);
- var sl:TStringList;
- begin
- sl := TStringList.create;
- try
- Memo1.Lines.Clear;
- MyReqursive(HKEY_CLASSES_ROOT,'',sl);
- MyReqursive(HKEY_CURRENT_USER,'',sl);
- MyReqursive(HKEY_LOCAL_MACHINE,'',sl);
- MyReqursive(HKEY_USERS,'',sl);
- MyReqursive(HKEY_CURRENT_CONFIG,'',sl);
- memo1.Lines.AddStrings(sl);
- finally
- sl.free;
- end;
- end;
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 5 ноября 2007, 22:58
Оценка за ответ: 5
Комментарий к оценке: супер.
|
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 5 ноября 2007, 22:02; участников в обсуждении: 2.
|
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 (статус: 3-ий класс), 5 ноября 2007, 22:02 [#2]:
мне нужны ключи и подключи. их я хочу получить. причём все и из всех HKEY_*
Чисти код! Чисти код! Чисти код!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|