Урок 8 - Работа с реестром
Ведущий раздела KOL и MCK: Анатолий aka XVeL
Автор: Борис Моренко
WEB-сайт: http://kol.mastak.ru
Полную версию библиотеки KOL и MCK можно скачать здесь.
Сейчас уже стало стандартом, что настройки программы, важные (да и не
очень) параметры храняться в реестре 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.
Исходный текст : 1,92 Кб ; размер программы: 30Кб (без сжатия и
замены System) После компиляции вы увидите примерно следующие:
Если вы читали мои предыдущие монологи про KOL, вам должно быть в
основном все понятно. Не говорил я только про свойства Font.FontName и
Font.FontHeight, но тут можно вполне догадатся, что мы меняем параметры
шрифта.
|