Использование компонента Registry
Пример1. Приведенный фрагмент по введенному в окне редактирования пути (он может быть пустым) к разделу реестра (расположенного в HKEY_LOCAL_MACHINE\SOFTWARE) дает возможность получить список его подразделов, а для подраздела, имеющего список пар параметр-значение - список имен параметров. Не забудьте добавить registry в uses.
procedure TForm1.Button1Click(Sender: TObject);
var reg : Tregistry; res : boolean; strs : TstringList; i : integer;
begin
ListBox1.Clear; ListBox2.Clear;
reg:=Tregistry.Create; strs:=TstringList.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKey('SOFTWARE\'+Edit1.Text,False);
if res then label1.caption:='ok';
// получение списка имен ключей (подразделов) раздела, путь которого указан строкой
// SOFTWARE\ и строкой, введенной в окне редактирования Edit1
reg.GetKeyNames(strs);
label2.Caption:=inttostr(strs.count);
for i:=1 to strs.count-1 do listbox1.Items.add(strs.strings[i]);
// получить имена параметров данного раздела
reg.GetValueNames(strs);
label2.Caption:=inttostr(strs.count);
for i:=1 to strs.count do listbox2.Items.add(strs.strings[i-1]);
reg.CloseKey;
end;
Пример 2. Поиск в разделе реестра заданного имени подраздела.
Const
RtK : array[1..6] of HKEY = (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER,
HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG, HKEY_DYN_DATA);
RKS: array[1..6] of String = ('HKEY_CLASSES_ROOT', 'HKEY_CURRENT_USER',
'HKEY_LOCAL_MACHINE', 'HKEY_USERS', 'HKEY_CURRENT_CONFIG', 'HKEY_DYN_DATA');
function SearchKey(MainKey:word; // номер одного из 6 разделов реестра
SubKey:String; // подраздел, с которого начинается поиск
KeyF:String // имя подраздела, которое требуется найти
):string;
var I:dword; value:TRegKeyInfo; Strs:TStringList; path : string;
begin
Strs:=TStringList.create;
reg.RootKey:= Rtk[MainKey] ;
// задаем подраздел, в котором необходимо искать
reg.OpenKey(SubKey,false);
if reg.GetKeyInfo(value) then
Begin // при отсутствии подраздела – выход
if value.NumSubKeys=0 then exit;
reestr.GetKeyNames(Strs);
reestr.CloseKey;
For I := 1 to Value.NumSubKeys do
Begin // получение пути к разделам
if subkey='\' then path:='\'+Strs.Strings[i-1] else path:=subkey+'\'+Strs.Strings[i-1];
if Strs.Strings[i-1]=KeyF then Listbox1.Items.add(Rks[MainKey]+Path); // запись результата
// вызов SearchKey ( ); - фактические параметры указать самостоятельно, исходя из логики процедуры поиска
End;
reg.CloseKey;
end;
end;
ВЫПОЛНЕНИЕ РАБОТЫ
Список заданий для всех бригад
- Написать приложение для создания в разделе HKEY_LOCAL_MACHINE\SOFTWARE подраздела, имя которого задается путем ввода с клавиатуры и записи в созданный раздел пары параметр-значение. Имя параметра и значение должны вводиться с клавиатуры.
- Добавить возможность редактирования с помощью разработанного приложения значений пар параметр-значение_строкового типа и проверить правильность выполнения редактирования на созданной в п.1 паре.
- Вывести список имен подразделов раздела, имя которого задается вводом с клавиатуры.
- Вывести список имен параметров пар заданного раздела.
- Вывести список типов значений параметров пар заданного раздела.
Примечание. п.1-п.5 выполнить с использованием функций Win32 API.
- Проверить работу фрагментов программ, приведенных в примерах 1 и 2.
Список индивидуальных заданий
1. Разработать приложение для нахождения количества подразделов в каждом из 6 основных разделов реестра и самого длинного пути к подразделу. Данное приложение должно запускаться на данном ПК не более 5 раз (информацию о количестве запусков хранить в реестре).
Бригады 1, 3, 6
2. Разработать приложение для поиска в заданном разделе реестра параметра по его имени. Результат поиска – список путей к подразделам реестра, в которых хранится параметр с заданным именем. Дать предложения по повышению скорости работы приложения за счет использования дихотомического поиска.
Бригады 2, 4, 5
3. Разработать приложение для поиска в заданном разделе реестра всех параметров строкового типа, длина значений которых не превышает K (значения K и раздел реестра должны задаваться вводом с клавиатуры).
Бригады 7, 8, 9, 10
ОТЧЕТ О РАБОТЕ должен содержать:
1 Описание постановки задач, решенных бригадой, алгоритмов решения задач и его программной реализации.
3. Полученные результаты.
Литература
Чен В., Берри В. Реестр Windows Nt для профессионалов. - СПб: "Издательство Питер", 1999.
Лабораторная работа № 6