Использование компонента 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;

ВЫПОЛНЕНИЕ РАБОТЫ

Список заданий для всех бригад

  1. Написать приложение для создания в разделе HKEY_LOCAL_MACHINE\SOFTWARE подраздела, имя которого задается путем ввода с клавиатуры и записи в созданный раздел пары параметр-значение. Имя параметра и значение должны вводиться с клавиатуры.
  2. Добавить возможность редактирования с помощью разработанного приложения значений пар параметр-значение_строкового типа и проверить правильность выполнения редактирования на созданной в п.1 паре.
  3. Вывести список имен подразделов раздела, имя которого задается вводом с клавиатуры.
  4. Вывести список имен параметров пар заданного раздела.
  5. Вывести список типов значений параметров пар заданного раздела.

Примечание. п.1-п.5 выполнить с использованием функций Win32 API.



  1. Проверить работу фрагментов программ, приведенных в примерах 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

Наши рекомендации