- Как три программиста могут организовать бизнес?
- Один пишет вирусы, а другой антивирусы.
- А третий?
- Операционные системы, под которыми все это работает.
Создать подраздел в реестре:
RegCreateKey (Key:HKey; SubKey: PChar; var Result: HKey): Longint;
Key - указывает на "корневой" раздел реестра, в Delphi1 доступен только один - HKEY_CLASSES_ROOT, а в Delphi3 - все.
SubKey - имя раздела - строится по принципу пути к файлу в DOS (пример subkey1\subkey2\ ...). Если такой раздел уже существует, то он открывается.
В любом случае при успешном вызове Result содержит Handle на раздел.
Об успешности вызова судят по возвращаемому значению, если ERROR_SUCCESS, то успешно, если иное - ошибка.
Открыть подраздел:
RegOpenKey(Key: HKey; SubKey: PChar; var Result: HKey): Longint;
Раздел Key
Подраздел SubKey
Возвращает Handle на подраздел в переменной Result. Если раздела с таким именем нет, то он не создается.
Возврат - код ошибки или ERROR_SUCCESS, если успешно.
Закрывает раздел:
RegCloseKey(Key: HKey): Longint;
Закрывает раздел, на который ссылается Key.
Возврат - код ошибки или ERROR_SUCCESS, если успешно.
Удалить подраздел:
RegDeleteKey(Key: HKey; SubKey: PChar): Longint;
Удалить подраздел Key\SubKey.
Возврат - код ошибки или ERROR_SUCCESS, если нет ошибок.
index - индекс, должен быть равен 0 при первом вызове RegEnumKey. Типичное использование - в цикле While, где index увеличивается до тех пор, пока очередной вызов RegEnumKey не завершится ошибкой
Возвращает текстовую строку, связанную с ключом Key\SubKey:
RegQueryValue(Key: HKey; SubKey: PChar; Value: PChar; var cb: Longint): Longint;
Ключ\подключ Key\SubKey.
Value - буфер для строки
cb - размер, на входе - размер буфера, на выходе - длина возвращаемой строки.
dwIndex - этот параметр должен быть 0 при первом вызове, а далее по анологии с RegEnumKey (т.е. можно использовать в цикле),
lpValueName - буфер для названия значения
lpcbValueName - размер lpValueName
lpReserved должно быть всегда 0
lpType - буфер для названия типа (int)
lpData - буфер для данных
lpcbData-размер для lpData
Примечание:
При каждой новом вызове функции после предыдущего нужно заново переназначить lpcbValueName.
lpcbValueName = sizeof(lpValueName)
Примеры:
{ Создаем список всех подразделов указанного раздела }procedure TForm1.Button1Click(Sender: TObject);
var
MyKey: HKey; { Handle для работы с разделом }
Buffer: array[0 .. 1000] of char; { Буфер }
Err, { Код ошибки }index: longint; { Индекс подраздела }begin
Err := RegOpenKey(HKEY_CLASSES_ROOT, 'DelphiUnit', MyKey); { Открыли раздел }if Err <> ERROR_SUCCESS thenbegin
MessageDlg('Нет такого раздела !!', mtError, [mbOk], 0);
exit;
end;
index := 0;
{Определили имя первого подраздела }
Err := RegEnumKey(MyKey, index, Buffer, Sizeof(Buffer));
while err = ERROR_SUCCESS do{ Цикл, пока есть подразделы }begin
memo1.lines.add(StrPas(Buffer)); { Добавим имя подраздела в список }
inc(index); { Увеличим номер подраздела }
Err := RegEnumKey(MyKey, index, Buffer, Sizeof(Buffer)); { Запрос }end;
RegCloseKey(MyKey); { Закрыли подраздел }end;
Доступ к реестру средствами API - это набор функций для работы с Windows-реестром в Delphi, позволяющий создавать, удалять и изменять записи в реестре.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.