Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> TRegistry. Работа с реестром Windows в Delphi. 
:(
    Опции темы
THandle
Дата 12.3.2008, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



TRegistry. Работа с реестром Windows в Delphi.

                                                                                                         


Что такое реестр Windows?

  Реестр Windows – это иерархически построенная база настроек и параметров операционной системы Windows. Реестр содержит в себе настройки программ, информацию об аппаратном обеспечении компьютера, индивидуальные настройки профилей пользователей Windows. Почти все данные реестра находятся в основном на винчестере компьютера.

Реестр состоит из следующих разделов:

HKEY_CURRENT_USER
HKEY_USERS
HKEY_LOCAL_MACHINE
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_DYN_DATA(этот раздел имеется только в Windows 9X/Me, поэтому мы его рассматривать не будем).
HKEY_PERFORMANCE_DATA

Теперь более подробно рассмотрим каждый раздел, и что он в себе хранит.


HKEY_CURRENT_USER

В этом разделе реестра хранятся настройки текущего пользователя Windows. Является подразделом HKEY_USERS.

HKEY_USERS

В данном разделе хранятся настройки всех активных пользователей системы.

HKEY_LOCAL_MACHINE

В этом разделе хранятся настойки конфигурации компьютера, относящиеся ко всем пользователям.

HKEY_CLASSES_ROOT

Этот раздел является подразделом HKEY_LOCAL_MACHINE\Software\Classes. В нем хранится информация о зарегистрированных типах файлов, а также об объектах COM и ActiveX.

HKEY_CURRENT_CONFIG

В этом разделе содержится информация о профиле оборудования, используемом локальным компьютером при запуске системы.


HKEY_PERFORMANCE_DATA

В этом разделе реестра хранятся счетчики производительности системы, и еще довольно большое количество подобной информации. В редакторе реестра (regedit) этот раздел не отображается. Данные этого раздела реестра хранятся не на винчестере, а в памяти компьютера.


Более подробную информацию о разделах реестра можно найти на сайте Microsoft:

http://support.microsoft.com/kb/256986/en-us


Реестр состоит из так называемых ульев(hive, иногда переводят на русский как «куст»), которые являются множеством разделов и параметров(ключей) реестра.

В Delphi работа с реестром Windows осуществляется с помощью класса TRegistry, находящегося в модуле Registry. Класс TRegistry является прямым наследником от класса TObject. 




Теперь рассмотрим свойства и методы класса TRegistry.



Методы Create.

1.

Объявлен как:

Код

constructor Create; overload;


Создаёт объект класса TRegistry для работы с реестром Windows. Свойству Access присваивается значение KEY_ALL_ACCESS.

Пример:

Код

Uses Registry;

procedure RegistryProc;
Var
  Reg : TRegistry;
Begin
  Reg := TRegistry.Create;
  Try 
    //производим действия с реестром
  Finally
    Reg.Free;
  End;
End;



2.

Объявлен как:

Код

constructor Create(AAccess: LongWord); overload;


Создает объект класса TRegistry, устанавливает свойство Access в значение параметра AAccess.

Пример:

Код

Uses Registry;

procedure RegistryProc;
Var
  Reg : TRegistry;
Begin
  Reg := TRegistry.Create(KEY_READ);//только чтение
  Try 
    //производим действия с реестром
  Finally
    Reg.Free;
  End;
End;




Свойство Access.

Объявлено как:

Код

property Access: LongWord;


Свойство Access используется для указания уровня безопасности при открытии ключей реестра.

Возможны следующие значения:



KEY_QUERY_VALUE  

Это значение свойства Access разрешает чтение данных из ключей реестра.


KEY_ENUMERATE_SUB_KEYS

Разрешает нумерацию ключей реестра.


KEY_NOTIFY  

Данное значение предоставляет возможность получать уведомления об изменениях в реестре.


KEY_SET_VALUE

Разрешает запись данных в реестр.


KEY_CREATE_SUB_KEY

Разрешает создание подключей.


KEY_CREATE_LINK

Разрешает создание символической ссылки.


KEY_READ  

Комбинация значений:  KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY.  


KEY_WRITE

Комбинация двух значений:  KEY_SET_VALUE  и  KEY_CREATE_SUB_KEY.


KEY_EXECUTE  

Разрешает доступ только для чтения. Равняется KEY_READ.


KEY_ALL_ACCESS

Комбинация следующих значений:  KEY_READ, KEY_WRITE, KEY_CREATE_LINK.  




Свойство RootKey.

Объявлено как:

Код

property RootKey: HKEY;


Используется для указания корневого раздела реестра. При создании объекта класса TRegistry  этому свойству присваивается значение HKEY_CURRENT_USER.
Пример:

Код

Uses Registry;

procedure RegistryProc;
Var
  Reg : TRegistry;
Begin
  Reg := TRegistry.Create;
  Try 
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    //производим еще какие-то действия с реестром
  Finally
    Reg.Free;
  End;
End;




Метод CreateKey.

Объявлен как:

Код

function CreateKey(const Key: string): Boolean;


Функция CreateKey создает в реестре ключ Key. Если создание ключа прошло успешно функция вернет true, иначе будет поднято исключение ERegistryException, поэтому настоятельно рекомендую все вызовы CreateKey заключать в блоки try..except(finally).

Пример:

Код

Uses Registry;

procedure RegistryProc;
Var
  Reg : TRegistry;
Begin
  Reg := TRegistry.Create;
  Try 
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    Reg.CreateKey('Software\MyProg');
    //производим еще какие-то действия с реестром
  Finally
    Reg.Free;
  End;
End;





Метод OpenKey.


Объявлен как:

Код

function OpenKey(const Key: string; CanCreate: Boolean): Boolean;



Функция OpenKey открывает ключ Key. Если CanCreate равно true, то если ключ, указанный в Key не найден, то он будет создан. Функция вернет true, если открытие ключа прошло успешно. 

Пример:

Код

Uses Registry;

procedure RegistryProc;
Var
  Reg : TRegistry;
Begin
  Reg := TRegistry.Create;
  Try 
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    Reg.OpenKey('Software\MyProg', true); //если ключ Software/MyProg не будет найден, то он в свою очередь будет создан
    //производим еще какие-то действия с реестром
  Finally
    Reg.Free;
  End;
End;





Метод OpenKeyReadOnly.

Объявлен как:

Код

function OpenKeyReadOnly(const Key: String): Boolean;


Открывает ключ Key только для чтения, со значением свойства Access равному KEY_READ. Функция возвращает true, если ключ удалось открыть.

Пример:

Код

Uses Registry;

procedure RegistryProc;
Var
  Reg : TRegistry;
Begin
  Reg := TRegistry.Create;
  Try 
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    Reg.OpenKeyReadOnly('Software\MyProg'); //если ключ Software/MyProg не будет найден, то функция вернет false
    //производим еще какие-то действия с реестром
  Finally
    Reg.Free;
  End;
End;






Свойства CurrentKey и CurrentPath.

Объявлены как:

Код

    property CurrentKey: HKEY read FCurrentKey;

    property CurrentPath: string read FCurrentPath;



  Свойство CurrentKey содержит в себе дескриптор ключа реестра, который в данный момент открыт. Изменяется при вызове  методов OpenKey и OpenKeyReadOnly. Данное свойство записи не подлежит, то есть, является read-only свойством. Если Вы не выходите за рамки действия созданного экземпляра TRegistry, то это свойство Вам вряд ли понадобится.

  Свойство CurrentPath содержит путь к ключу реестра, который в данный момент открыт. Аналогично CurrentKey это read-only свойство. CurrentPath автоматически изменяется при открытии другого ключа.

Пример:

По нажатию кнопки появляется сообщение с информацией о текущем открытом ключе реестра.

Код

Uses Registry;

procedure TForm1.Button1Click(Sender: TObject);
var
  Reg : TRegistry;
Begin
  Reg := TRegistry.Create;
  Try 
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    Reg.OpenKeyReadOnly('Software\MyProg'); 
    ShowMessage(reg.CurretPath);
  Finally
    Reg.Free;
  End;
end;





Методы WriteString, ReadString.

Объявлены как:

Код

procedure WriteString(const Name, Value: string);

function ReadString(const Name: string): string;




Процедура WriteString пишет в открытый ключ реестра(CurrentPath) параметр с именем Name и строковым значением Value.

Функция ReadString читает из открытого ключа параметр с именем Name. Если ключ не найден, то функция вернет пустую строку, иначе, прочитанное из реестра строчное значение.

Пример:

По нажатию первой кнопки пишем в реестр строковый параметр, а при нажатии на вторую кнопку его читаем и показываем в сообщении.

Код

Uses Registry;

procedure TForm1.Button1Click(Sender: TObject);
var
 reg : tregistry;
begin
  reg := tregistry.create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.OpenKey('Software\MyProgram',true);
    reg.WriteString('Str1', 'Реестр, превед:)');
  finally
    reg.free;
  end;
end;


Код

procedure TForm1.Button2Click(Sender: TObject);
var
 reg : tregistry;
begin
  reg := tregistry.create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.OpenKey('Software\MyProgram',true);
    ShowMessage(reg.ReadString('Str1'));
  finally
    reg.free;
  end;
end;





Метод WriteExpandString.

Объявлен как:

Код

procedure WriteExpandString(const Name, Value: string);


Процедура аналогична WriteString, только пишет в реестр так называемые «широкие»(не путать с Unicode!) строки, которые чаще всего описывают переменные окружения Windows, например "%PATH%".

Пример:
  См. Пример к методам WriteString/ReadString.




Методы WriteInteger, ReadInteger.

Объявлены как:

Код

    procedure WriteInteger(const Name: string; Value: Integer);

    function ReadInteger(const Name: string): Integer;



Процедура WriteInteger пишет в открытый ключ реестра параметр с именем Name и целочисленным значением Value.

Функция ReadInteger читает из открытого ключа параметр с именем Name. Если ключ не найден, то будет поднято исключение типа ERegistryException, иначе, прочитанное из реестра целочисленное значение.


Пример:
  См. Пример к методам WriteString/ReadString.




Методы WriteFloat, ReadFloat.

Объявлены как:

Код

procedure WriteFloat(const Name: string; Value: Double);

function ReadFloat(const Name: string): Double;


Процедура WriteFloat пишет в открытый ключ реестра параметр с именем Name и  значением в виде натурального числа Value.

Функция ReadFloat читает из открытого ключа параметр с именем Name. Если ключ не найден, то будет поднято исключение типа ERegistryException, иначе, прочитанное из реестра натуральное число.

Пример:
  См. Пример к методам WriteString/ReadString.




Методы WriteBool, ReadBool.

Объявлены как:

Код

    procedure WriteBool(const Name: string; Value: Boolean);

    function ReadBool(const Name: string): Boolean;


Процедура WriteBool пишет в открытый ключ реестра параметр с именем Name и булевым значением Value.

Функция ReadBool читает из открытого ключа параметр с именем Name. Если ключ не найден, то будет поднято исключение типа ERegistryException, иначе, прочитанное из реестра булево значение.

Пример:
  См. Пример к методам WriteString/ReadString.




Методы WriteCurrency, ReadCurrency.

Объявлены как:

Код

procedure WriteCurrency(const Name: string; Value: Currency);

function ReadCurrency(const Name: string): Currency;


Процедура WriteCurrency пишет в открытый ключ реестра параметр с именем Name и денежным значением Value.

Функция ReadCurrency читает из открытого ключа параметр с именем Name. Если ключ не найден, то будет поднято исключение типа ERegistryException, иначе, прочитанное из реестра денежное значение.

Пример:
  См. Пример к методам WriteString/ReadString.




Методы WriteDate, ReadDate.

Объявлены как:

Код

    procedure WriteDate(const Name: string; Value: TDateTime);
 
    function ReadDate(const Name: string): TDateTime;


Процедура WriteDate пишет в открытый ключ реестра дату с именем Name.

Функция ReadDate читает из открытого ключа параметр с именем Name. Если ключ не найден, то будет поднято исключение типа ERegistryException, иначе, функция вернет прочитанную дату.


Пример:
  См. Пример к методам WriteString/ReadString.




Методы WriteTime, ReadTime.

Объявлены как:

Код

procedure WriteTime(const Name: string; Value: TDateTime);

function ReadTime(const Name: string): TDateTime;



Процедура WriteTime пишет в открытый ключ реестра параметр со значением типа время и с именем Name.

Функция ReadTime читает из открытого ключа параметр с именем Name. Если ключ не найден, то будет поднято исключение типа ERegistryException, иначе, функция вернет прочитанное время.

Пример:
  См. Пример к методам WriteString/ReadString.





Методы WriteDateTime, ReadDateTime.

Объявлены как:

Код

procedure WriteDateTime(const Name: string; Value: TDateTime);
    
function ReadDateTime(const Name: string): TDateTime;



Процедура WriteDateTime пишет в открытый ключ реестра параметр с именем Name и значением в виде дата + время.

Функция ReadDateTime читает из открытого ключа параметр с именем Name. Если ключ не найден, то будет поднято исключение типа ERegistryException, иначе, функция вернет прочитанную дату и время.

Примечание: На самом деле методы WriteDate, ReadDate, WriteTime, ReadTime просто вызывают в своём теле Write(Read)DateTime с соответствующими параметрами.


Пример:
  См. Пример к методам WriteString/ReadString.




Это сообщение отредактировал(а) THandle - 13.3.2008, 17:29
PM   Вверх
THandle
Дата 12.3.2008, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



Методы WriteBinaryData, ReadBinaryData.

Объявлены как:

Код

procedure WriteBinaryData(const Name: string; var Buffer; BufSize: Integer);

function ReadBinaryData(const Name: string; var Buffer; BufSize: Integer): Integer;



Процедура WriteBinaryData записывает в открытый на данный момент ключ реестра  в параметр с именем Name данные в HEX виде из буфера Buffer, размером BufSize. При ошибке записи будет поднято исключение ERegistryException.

Функция ReadBinaryData читает из открытого в  данный момент ключа шестнадцатеричные данные размером BufSize из параметра с именем Name в буфер Buffer. Размер буфера должен быть больше или равен размеру читаемых данных, иначе будет возбуждено исключение типа ERegistryException. Результатом работы функции является размер прочитанных данных.

Пример: 

По нажатию первой кнопки в реестр пишется массив байт, а по нажатию второй – читается оттуда.

Код

Uses Registry;

//Объявим тип нашего буфера
type
   TBuff = array [1..256] of byte;


Код

//пишем данные в реестр
procedure TForm1.Button1Click(Sender: TObject);
var
  reg : tregistry;
  buf : TBuff;
  i : Integer;
begin
  reg := tregistry.create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.OpenKey('Software\MyProgram',true);
    for i := 1 to length(buf) do
      buf[i] := random(256); //заполняем наш буфер случайными значениями
    reg.WriteBinaryData('bin', buf, sizeof(TBuff));
  finally
    reg.free;
  end;
end;




Код

//читаем
procedure TForm1.Button6Click(Sender: TObject);
var
  reg : tregistry;
  buf : TBuff;
begin
  reg := tregistry.create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.OpenKey('Software\MyProgram',true);
    reg.ReadBinaryData('bin', buf, sizeof(TBuff));
  finally
    reg.free;
  end;
end;




Метод DeleteKey.

Объявлен как:

Код

function DeleteKey(const Key: string): Boolean;


Удаляет ключ, указанный в Key, а также все подключи и параметры из него. Если всё прошло успешно функция вернет true, иначе false.

Пример:

Код

Uses Registry;

procedure RegistryProc;
var
 reg : tregistry;
begin
  reg := tregistry.create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.DeleteKey(‘Software\MyProgram’);
  finally
    reg.free;
  end;
end;





Метод DeleteValue.

Объявлен как:

Код

function DeleteValue(const Name: string): Boolean;


Удаляет из текущего открытого ключа параметр Name. Если всё прошло успешно то функция вернет true, иначе false.

Пример:

Код

Uses Registry;

var
 reg : tregistry;
begin
  reg := tregistry.create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.DeleteValue (‘Value1’);
  finally
    reg.free;
  end;
end;




Метод GetKeyInfo.

Объявлен как:

Код

function GetKeyInfo(var Value: TRegKeyInfo): Boolean;


С помощью этой функции можно получить информацию о текущем ключе. Единственный параметр функции Value представляет собой следующую структуру:


Код

  TRegKeyInfo = record
    NumSubKeys: Integer;
    MaxSubKeyLen: Integer;
    NumValues: Integer;
    MaxValueLen: Integer;
    MaxDataLen: Integer;
    FileTime: TFileTime;
  end;


После вызова функция вернет true в случае успеха и занесет всю нужную информацию в переданную в параметре Value структуру, иначе вернет false.

Теперь разберем, что представляет из себя структура TRegKeyInfo, и для чего нужны её поля:

NumSubKeys

Количество подключей.

MaxSubKeyLen

Максимальная длина имени подключа.

NumValues

Количество параметров.

MaxValueLen

Максимальная длина имени параметра.

MaxDataLen

Максимальный размер записанных данных.

FileTime

Время последнего обновления ключа.


Пример:

Код

Uses registry;

procedure RegistryProc;
var
  reg : tregistry;
  info : TRegKeyInfo;
begin
  reg := tregistry.create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.OpenKey('Software\MyProgram',true);
    reg.GetKeyInfo(info);
  finally
    reg.free;
  end;
end;





Метод GetDataInfo.

Объявлен как:

Код

    function GetDataInfo(const ValueName: string; var Value: TRegDataInfo): Boolean;


Получает информацию о параметре с именем ValueName. Заносит её в структуру Value типа TRegDataInfo.

Код

  TRegDataInfo = record
    RegData: TRegDataType;
    DataSize: Integer;
  end;


Поле структуры RegData представляет из себя следующий тип:

Код

TRegDataType = (rdUnknown, rdString, rdExpandString, rdInteger, rdBinary);


Теперь о возможных значениях типа TRegDataType. 

rdUnknown

Неизвестный тип.

rdString

Строка.

rdExpandString

«Широкая» строка (см. метод WriteExpandString).

rdInteger

Целое число.

rdBinary

Любые двоичные данные(записываемые например процедурой WriteBinaryData).


Нужен этот тип для определения типа записанных в параметре данных. Второе поле структуры TRegDataInfo – DataSize. Это размер значения параметров в байтах.

Пример:
    
Код

Uses registry;

procedure RegistryProc;
var
  reg : tregistry;
  info : TRegDataInfo;
begin
  reg := tregistry.create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.OpenKey('Software\MyProgram',true);
    reg.WriteString('str1','String');//пишем какую-то строку.
    reg.GetDataInfo('str1', info);//получаем о ней информацию
  finally
    reg.free;
  end;
end;




Метод GetDataSize.

Объявлен как:

Код

function GetDataSize(const ValueName: string): Integer;


Узнает размер значения параметра реестра с именем ValueName. Возвращает размер в байтах.
На самом деле эта функция просто вызывает в своем теле GetDataInfo и возвращает параметр DataSize структуры TRegDataInfo.

Пример:
  См. пример к методу GetDataInfo.




Метод GetDataType.

Объявлен как:

Код

function GetDataType(const ValueName: string): TRegDataType;


Вызывает функцию GetDataInfo, для параметра ValueName, и возвращает поле RegData структуры TRegDataInfo.


Пример:
  См. пример к методу GetDataInfo.




Метод RenameValue.

Объявлен как:

Код

procedure RenameValue(const OldName, NewName: string);


Переименовывает ключ OldName в NewName. Значение параметра остается прежним.
Примечание: на самом деле просто создается новый ключ, и в него копируется значение из старого, после чего последний удаляется. Для выполнения функции необходимо наличие ключа OldName. 

Пример:

Код

Uses registry;

procedure RegistryProc;
var
  reg : tregistry;
begin
  reg := tregistry.create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.OpenKey('Software\MyProgram',true);
    reg.WriteString('str1','String');//пишем какую-то строку.
    Reg.RenameValue('str1', 'str2');// переименовываем в str2
  finally
    reg.free;
  end;
end;




Метод GetKeyNames.

Объявлен как:

Код

procedure GetKeyNames(Strings: TStrings);


Записывает в параметр Strings имена всех подключей текущего открытого ключа.

Пример: 

Положите на форму кнопку и TMemo.

OnClick кнопки:

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  reg : tregistry;
  i : integer;
begin
  reg := tregistry.create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.OpenKey('Software\MyProgram',true);
    for i := 0 to 9 do
      reg.CreateKey('SubKey' + inttostr(i));//создаем подключи
    reg.GetKeyNames(Memo1.Lines);
  finally
    reg.free;
  end;
end;


В результате в Memo1 получим следующий список:

Код

SubKey0
SubKey1
SubKey2
SubKey3
SubKey4
SubKey5
SubKey6
SubKey7
SubKey8
SubKey9





Метод GetValueNames.


Объявлен как:

Код

procedure GetValueNames(Strings: TStrings);


Получает список всех параметров текущего ключа и заносит их в Strings. Параметры подключей в список не включаются.

Пример:
  См. Пример к методы GetKeyNames.




Метод HasSubKeys.

Объявлен как:

Код

function HasSubKeys: Boolean;


Эта функция проверяет наличие подключей в текущем открытом ключе. Если хоть один подключ существует, то функция вернет true, иначе false.
Примечание: на самом деле функция HasSubKey вызывает в своем теле метод GetKeyInfo, и  если она в структуре TRegKeyInfo возвращает поле NumSubKeys, которое больше 0, то тогда HasSubKey и возвращает true.




Метод KeyExists.


Объявлен как:

Код

function KeyExists(const Key: string): Boolean;


Проверяет наличие ключа по указанному в Key пути. Если ключ существует, то вернет true, иначе вернет false.

Пример:

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  reg : tregistry;
begin
  reg := tregistry.create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.OpenKey('Software\MyProgram',true);
    reg.CreateKey('SubKey');
    if reg.KeyExists('SubKey') then
      ShowMessage('Ключ SubKey найден')
    else
      ShowMessage('Ключ SubKey не найден');
  finally
    reg.free;
  end;
end;


Примечание к примеру: в нашем случае всегда будет показано сообщение о том, что ключ найден, так как перед вызовом KeyExists мы его создаем.




Метод ValueExists.

Объявлен как:

Код

function ValueExists(const Name: string): Boolean;


Проверяет наличие параметра с именем Name в текущем открытом ключе. Если параметр существует, то функция вернет true, иначе вернет false.

Пример:
См. Пример к методу KeyExists.




Метод CloseKey.

Объявлен как:

Код

procedure CloseKey;


CloseKey записывает измененные данные, после чего закрывает текущий ключ. Некоторые методы чтения / записи вызывают в себе CloseKey сразу после произведенных действий.

Примечание: Ключ реестра следует закрывать сразу же как с ним проведены все необходимые действия. Не держите ключ подолгу открытым. Лучше закройте его, а когда он потребуется, вновь откройте.




Свойство LazyWrite.

Объявлено как:

Код

property LazyWrite: Boolean read FLazyWrite write FLazyWrite;


LazyWrite используется для указания того, как ключи должны быть записаны в реестр.
При создании объекта TRegistry это свойство равно true.
Если LazyWrite истинно(true), то система сама решает, когда лучше записать данные на диск. Сначала все данные помещаются в оперативную память.
Когда LazyWrite равняется false, ключи записываются на диск немедленно, что может достаточно сильно нагрузить систему, поэтому я советую вам использовать LazyWrite(false) только в самых крайних случаях.





Метод MoveKey.

Объявлен как:

Код

procedure MoveKey(const OldName, NewName: string; Delete: Boolean);


Переносит ключ OldName, все его подключи и параметры в ключ NewName. Процедура сойдает новый ключ(NewName) и рекурсивно переносит в него все подключи и параметры из OldName. Если Delete равняется true, то старый ключ будет удален, иначе он останется на своём месте.

Пример:

Код

procedure TForm1.Button10Click(Sender: TObject);
var
  reg : tregistry;
  i : integer;
begin
  reg := tregistry.create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.OpenKey('Software\MyProgram',true);
    for i := 0 to 9 do
      reg.CreateKey('SubKey' + inttostr(i));//создадим пару-тройку подключей
    reg.CloseKey;
    reg.MoveKey('Software\MyProgram','Software\NewMyProgram', false);
  finally
    reg.free;
  end;
end;


Примечание: в данном случае будет произведено просто копирование ключа, так как параметр Delete указан как false.




Метод  SaveKey.

Объявлен как:

Код

function SaveKey(const Key, FileName: string): Boolean;


Сохраняет все подключи и параметры ключа Key в файл FileName в виде улья.
Файл FileName не должен существовать. 




Метод LoadKey.

Объявлен как:
Код


function LoadKey(const Key, FileName: string): Boolean;


Создает ключ Key в корне(свойство RootKey) реестра, и записывает в него улей из файла FileName. В качестве RootKey можно указывать только HKEY_USERS и HKEY_LOCAL_MACHINE, так как остальные разделы реестра являются лишь их частями. В случае удачи функция вернет true, иначе false. При перезагрузке системы ключ теряется, но до этого может быть удален только функцией UnLoadKey.





Метод UnLoadKey.

Объявлен как:

Код

function UnLoadKey(const Key: string): Boolean;


Удаляет из реестра ключ Key, ранее созданный методом LoadKey.




Метод ReplaceKey.

Объявлен как:

Код

    function ReplaceKey(const Key, FileName, BackUpFileName: string): Boolean;


Заменяет указанный в Key ключ, все его подключи и параметры содержимым файла FileName. Ключ Key сохраняется в файл с именем BackUpFileName. Замена происходит только после перезагрузки системы. Функция возвращает true, если всё прошло удачно и false, если что-то не получилось.




Метод RestoreKey.

Объявлен как:
Код


function RestoreKey(const Key, FileName: string): Boolean;



Загружает в указанный ключ Key содержимое файла FileName. Все подключи и параметры ключа Key буду заменены прочитанными из файла данными.  При удачной загрузке функция вернет true, иначе false. 




Метод RegistryConnect.

Объявлен как:


Код

function RegistryConnect(const UNCName: string): Boolean;



Используется для соединения с реестром другого компьютера. Параметр UNCName – имя удаленного компьютера. Должно иметь следующий вид:

Код

\\computername


Перед тем как вызвать RegistryConnect, необходимо установить свойство RootKey в одно из двух значений:

HKEY_USERS 
HKEY_LOCAL_MACHINE


Если удалось подключится, то функция установит свойство RootKey в значение этого же свойства на удаленном компьютере и вернет true, иначе свойство RootKey останется в том же виде в котором вы его оставили, и функция вернет false.




Полезные ссылки(обещаю по мере нахождения их в интернете добавлять сюда):

Узнать значение параметра по умолчанию у ключа реестра




Хочу так же выразить благодарность Rrader'у, за полезные замечания по поводу статьи.



По просьбе трудящихся прикрепляю .doc файл.

Это сообщение отредактировал(а) THandle - 4.5.2008, 19:44

Присоединённый файл ( Кол-во скачиваний: 164 )
Присоединённый файл  TRegistry.doc 176,50 Kb
PM   Вверх
Rrader
  Дата 12.3.2008, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



Молодец!)) smile 


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
JackYF
Дата 12.3.2008, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: нет
Всего: 162



^)))


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Lexicss
Дата 12.3.2008, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 16.8.2006
Где: Беларусь, Минск

Репутация: нет
Всего: 1



Я ещё ни в одной книге по Delphi не находил похожий статей. На мой взгял довольно полезная. Спасибо THandleru. ;)
--------------------
Бери от жизни всё.
PM MAIL WWW ICQ Skype   Вверх
Dronchik
Дата 13.3.2008, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Звукач ёмаё
**


Профиль
Группа: Участник
Сообщений: 451
Регистрация: 1.5.2007

Репутация: нет
Всего: 37



Отличная статья +1


--------------------
Вместо слов делай дело, от которого ты фанатеешь. (с)

PM MAIL WWW ICQ   Вверх
THandle
Дата 13.3.2008, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



Всем спасибоsmile Ждите в скором времени еще статейsmile


ЗЫ: Если найдете какие-то ошибки, неточности, опечатки и тд., то пожалуйста пишите в PM или в ICQ.
PM   Вверх
bems
Дата 13.3.2008, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(THandle @  12.3.2008,  17:08 Найти цитируемый пост)
Процедура аналогична WriteString, только пишет в реестр так называемые «широкие» строки, которые чаще всего описывают переменные окружения Windows, например "%PATH%".
вот это сбивает с толку. Под широкой строкой обычно имеется в виду уникод. А тут речь о строках нуждающихся в вызове ExpandEnvironmentString



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Ofer
Дата 24.3.2008, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: 1
Всего: 5



Прелестно.... просто замечательно.... +1
PM MAIL ICQ   Вверх
Erazer
Дата 21.1.2009, 02:17 (ссылка)   | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 1.6.2008

Репутация: -1
Всего: -1



Кто нить может подсказать как заставить работать    
 
 Reg := TRegistry.Create(KEY_READ); 
  Try 
  Reg.SaveKey('Software\Microsoft\Windows Mail',TmpFolder + '\WMailReg1.reg'); 
  Finally 
    Reg.Free; 
  End; 
в Vista без прав админа ?

С импотром та же шняга -  права админа и все тут :-(
PM MAIL   Вверх
Akella
Дата 21.1.2009, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Erazer, я не вижу, с каким разделом реестра работаешь? Какая ошибка, конкретнее? И убери отсюда все свои шняги, ПОНЯЛ? И темы не плоди.
PM MAIL   Вверх
agent13
Дата 10.2.2009, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 9.6.2007

Репутация: нет
Всего: нет



Помогите пожалуйста надо создать ключи типа Dword и Binary. Подскажите как это реализовать в Delphi.
PM MAIL   Вверх
THandle
Дата 10.2.2009, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



agent13, ну зачем поднимать старые темы, а тем более статьи??? Правила форума читал?

Используй WriteInteger, WriteBinaryData.

Пример(хотя выше они есть):

Код

var
  A: Array [1..4] Of Byte = (1, 2, 3, 4);

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TRegistry.Create do
  try
    RootKey := HKEY_CURRENT_USER;
    OpenKey('Software\MySuperPuperProg', true);
    WriteInteger('Param1', 29);
    WriteBinaryData('Param2', A, SizeOf(A));
  finally
    Free;
  end;
end;

PM   Вверх
agent13
Дата 10.2.2009, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 9.6.2007

Репутация: нет
Всего: нет



а поподробнее про  WriteBinaryData('Param2', A, SizeOf(A)); объясните. Я непонял. Что за А и SizeOf(A).
PM MAIL   Вверх
THandle
Дата 11.2.2009, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



Цитата(THandle @  10.2.2009,  22:31 Найти цитируемый пост)
var
  A: Array [1..4] Of Byte = (1, 2, 3, 4);


Массив... SizeOf - размер... Для примера... Выше же в статье даются примеры с пояснением... Или я её зря писал? smile
PM   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1259 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.