Работа с реестром

Сейчас уже стало стандартом, что настройки программы, важные (да и не очень) параметры храняться в реестре Windows. По этой причине и в KOL существует поддержка работы с реестром. Нельзя сказать, что эти инструменты такие же мощные, как и TRegister в VCL, но необходимый минимум найдется.

Работа с регистром в KOL построена с помощью функций. Их список я привожу в таблице с кратким описанием (хотя человек знакомый с TRegister поймет их и так).

Функция Выполняемое действие
Функции для работы с ключами
RegKeyOpenCreate

Создание ключа и его открытие

function RegKeyOpenCreate( Key: HKey; const SubKey: String ): HKey;


RegKeyOpenRead

Открытие ключа для чтения

function RegKeyOpenRead( Key: HKey; const SubKey: String ): HKey;


RegKeyOpenWrite

Открытие ключа для записи

function RegKeyOpenWrite( Key: HKey; const SubKey: String ): HKey;


RegKeyClose

Закрытие ключа регистра ранее открытого с помощью RegKeyOpenRead или RegKeyOpenWrite

procedure RegKeyClose( Key: HKey );


RegKeyDelete

Удаление ключа регистра

function RegKeyDelete( Key: HKey; const SubKey: String ): Boolean;


RegKeyExists

Возвращение true, если "подключ" (SubKey) существует в данном ключе (Key)

function RegKeyExists( Key: HKey; const SubKey: String ): Boolean;


RegKeyGetSubKeys

Возвращение в List список всех "подключей"(ниже лежащих ключей) для ключа Key

function RegKeyGetSubKeys( const Key: HKEY; List: PStrList ): Boolean;


Функции для работы с переменными
RegKeyDeleteValue

Удаление из ключа Key переменной с именем Value.

function RegKeyDeleteValue( Key: HKey; const Value: String ): Boolean;

RegKeyValExists

Возвращение TRUE, если параметр ValueName существует в ключе Key.

function RegKeyValExists( Key: HKey; const ValueName: String ): Boolean;


RegKeyValueSize

Возвращает размер переменной(ValueName). Для переменных типа строка (string) возвращаемое значение равно длине строки + 1 (нулевой символ)

function RegKeyValueSize( Key: HKey; const ValueName: String ): Integer;


RegKeyGetValueNames

Возвращает список всех имен переменных находящихся в ключе Key

function RegKeyGetValueNames( const Key: HKEY; List: PStrList ): Boolean;


RegKeyGetValueTyp

Возвращает тип переменной под именем ValueName. Возвращаемое значение может быть следующие :
REG_BINARY , REG_DWORD, REG_DWORD_LITTLE_ENDIAN,
REG_DWORD_BIG_ENDIAN, REG_EXPAND_SZ, REG_LINK , REG_MULTI_SZ,
REG_NONE, REG_RESOURCE_LIST, REG_SZ

function RegKeyGetValueTyp( const Key: HKEY; const ValueName: String ): DWORD;


Функции для работы с переменными DWORD
RegKeyGetDw

Чтение из ключа данных типа DWORD. Если чтение не успешно, то возвращение 0

function RegKeyGetDw( Key: HKey; const ValueName: String ): DWORD;


RegKeySetDw

Запись в ключ данных типа DWORD.

function RegKeySetDw( Key: HKey; const ValueName: String; Value: DWORD ): Boolean;


Функции для работы с переменными STRING
RegKeyGetStr

Чтение из ключа данных типа String. Если чтение не успешно, то возвращение пустой строки

function RegKeyGetStr( Key: HKey; const ValueName: String ): String;


RegKeyGetStrEx

Чтение из ключа данных типа String. Если чтение не успешно, то возвращение пустой строки. Расширенный по саоим возможносям вариант RegKeyGetStr.

function RegKeyGetStrEx( Key: HKey; const ValueName: String ): String;


RegKeySetStr

Запись в ключ данных типа String.

function RegKeySetStr( Key: HKey; const ValueName: String; const Value: String ): Boolean;


Функции для работы с переменными BINARY
RegKeyGetBinary

Чтение из ключа данных типа binary. Происходит запись данных из реестра в буфер Buffer размером Count. На выходе у функции количество прочитанных байт.

function RegKeyGetBinary( Key: HKey; const ValueName: String; var Buffer; Count: Integer ): Integer;


RegKeySetBinary

Запись в ключ данных типа Binary.

function RegKeySetBinary( Key: HKey; const ValueName: String; const Buffer; Count: Integer ): Boolean;


Функции для работы с датой
RegKeyGetDateTime

Чтение из переменной с именем ValueName дыты. В реестре эти данные хранятся в бинарном виде.

function RegKeyGetDateTime( Key: HKey; const ValueName: String ): TDateTime;


RegKeySetDateTime

Запись даты в реестр.

function RegKeySetDateTime( Key: HKey; const ValueName: String; DateTime: TDateTime ): Boolean;


Для начала работы с каким-либо ключом регистра, вы должны открыть его с помощью функций RegKeyOpenRead, RegKeyOpenWrite или RegKeyOpenCreate. В первом параметре должен передаватся HKey какого нибудь ранее открытого ключа или одна из следующих констант:
HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS
Второй параметр:SubKey - имя ключа расположенного ниже Key.

После того как вы открыли ключ, вы можете записывать и читать данные. Ну и логическое завершение всего процесса - это команда RegKeyClose, т.е. закрытие ключа, если он вам больше не нужен.

Пример чтения и записи в реестра:


program Primer_1;   
   
uses   
  windows,   
  messages,   
  kol;   
   
{$R *.RES}   
const   
 KeyWin = 'SOFTWARE\Microsoft\Windows\CurrentVersion';   
   
var   
 Form,   
 edOption,   
 buOption,   
 List,   
 panTop:pControl;   
 Key:HKey;   
   
///////////////////////////////////////////////////////////   
Procedure ClickOnList( Dummy : Pointer; Sender : PControl );   
begin   
 // чтение из реестра   
 Key := RegKeyOpenRead(HKEY_LOCAL_MACHINE,KeyWin);   
 edOption.Text := RegKeyGetStr(Key,List.Items[List.CurIndex]);   
 RegKeyClose(Key);   
end;   
///////////////////////////////////////////////////////////   
Procedure ClickOnButton( Dummy : Pointer; Sender : PControl );   
begin   
 // запись в реестра  
 if edOption.Text='' then exit;   
 Key := RegKeyOpenWrite(HKEY_LOCAL_MACHINE,KeyWin);   
 RegKeySetStr(Key,List.Items[List.CurIndex],edOption.Text);   
 RegKeyClose(Key);   
end;   
///////////////////////////////////////////////////////////   
   
begin   
 Form := NewForm(Applet,'Пример работы с реестром').SetSize(400,200);   
   
 // можно было обойтись и Form.CanResize := false   
 Form.Style := WS_BORDER or WS_SYSMENU or WS_VISIBLE;   
   
 Form.Font.FontName := 'MS Sans Serif';   
 Form.Font.FontHeight := 8;   
   
 panTop := NewPanel(Form,esRaised).SetAlign(caTop);   
 edOption := NewEditbox(panTop,[]);   
 buOption := NewButton (panTop,'Применить').PlaceRight;   
 buOption.OnClick := TOnEvent( MakeMethod( nil, @ClickOnButton ) );   
   
 List := NewListbox(Form,[]).SetAlign(caClient);   
 List.Add('ProductId');   
 List.Add('ProductName');   
 List.Add('RegisteredOrganization');   
 List.Add('RegisteredOwner');   
 List.Add('Version');   
 List.Add('VersionNumber');   
 List.OnClick := TOnEvent( MakeMethod( nil, @ClickOnList ) );   
    
 // ----- Наводим красоту жонглируя с размерами.--------   
 //  Можно и не вникать :)   
 edOption.Width := panTop.Width - buOption.Width-10;   
 buOption.Left := edOption.Width+ 4 ;   
 panTop.Height := edOption.Height+10;   
 //-----------------------------------------------------   
   
 Run(Form);   
end.   

Если вы читали мои предыдущие монологи про KOL, вам должно быть в основном все понятно. Не говорил я только про свойства Font.FontName и Font.FontHeight, но тут можно вполне догадатся, что мы меняем параметры шрифта.
Теги:
реестр
Добавлено: 27 Июля 2018 08:31:07 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...