Доступ к реестру средствами API

Создать подраздел в реестре:


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, если нет ошибок.

Получить имена всех подразделов раздела Key:


RegEnumKey(Key:HKey; index: Longint; Buffer: PChar; cb: Longint): Longint; 

Key - Handle на открытый или созданный раздел
Buffer - указатель на буфер
cb - размер буфера
index - индекс, должен быть равен 0 при первом вызове RegEnumKey. Типичное использование - в цикле While, где index увеличивается до тех пор, пока очередной вызов RegEnumKey не завершится ошибкой

Возвращает текстовую строку, связанную с ключом Key\SubKey:


RegQueryValue(Key: HKey; SubKey: PChar; Value: PChar; var cb: Longint): Longint; 

Ключ\подключ Key\SubKey.
Value - буфер для строки
cb - размер, на входе - размер буфера, на выходе - длина возвращаемой строки.
Возврат - код ошибки.

Задать новое значение ключу Key\SubKey:


RegSetValue(Key: HKey; SubKey: PChar; ValType: Longint; Value: PChar; cb: Longint): Longint;  

Ключ\подключ Key\SubKey.
ValType - тип задаваемой переменной,
Value - буфер для переменной
cb - размер буфера. В Windows 3.1 допустимо только Value=REG_SZ.
Возврат - код ошибки или ERROR_SUCCESS, если нет ошибок.

Удаляет значение lpValueName находящееся в ключе hKey:


RegDeleteValue(HKEY hKey, LPCTSTR lpValueName);  

hKey - ключ. hKey должен был быть открыт с доступом KEY_SET_VALUE процедурой RegOpenKey.
lpValueName - значение, находящееся в ключе hKey.
Возвращает ERROR_SUCCESS если успешно.

Выдает список значений у ключа hKey:


LONG RegEnumValue( HKEY hKey, DWORD dwIndex, LPTSTR lpValueName, LPDWORD lpcbValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData);  

hKey - ключ.
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 then  
begin  
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;  
Теги:
реестр
Добавлено: 31 Июля 2018 07:27:14 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...