RSS
 

 

Как сохранять и восстанавливать значения из реестра Windows?

05 Янв


Хорошо спроектированная программа должна уметь подстраивается под пользователя, запоминая его настройки и восстанавливать их при следующем запуске. Для хранения настроек приложений и предназначен реестр Windows.
Как сохранять и восстанавливать значения параметров программы из реестра Windows?

Для сохранения значений в реестре существует раздел HKEY_CURRENT_USER, который связан с активным в данный момент пользователем и HKEY_LOCAL_MACHINE, связанный с компьютером - это как бы общий для всех пользователей раздел.
Я сохраняю параметры своих программ в основном в HKEY_CURRENT_USER чтобы каждый пользователь мог иметь собственные настройки.
В Delphi есть замечательный модуль registry и класс TRegistry для работы с реестром Windows

Для этих целей я написал и использую пару функций SaveParams и RestoreParams.

Вот вариант моей реализации этих функций:

unit ZFunctions;
 
interface
 
uses
  ...  registry, variants, ...
 
function SaveParams(keyname : string; keyvalue : variant):boolean;
 
function RestoreParams(keyname : string; defaultvalue : variant):variant;
 
const
 DefProgramRootKey = '\SOFTWARE\ZewsSoftware\Options';
 
var
 ProgramRootKey : string;
 
implementation
 
function SaveParams(keyname : string; keyvalue : variant):boolean;
 var
  Reg : TRegistry;
begin
 Result := false;
 if ProgramRootKey = '' then ProgramRootKey := DefProgramRootKey;
 Reg := TRegistry.Create;
 try
  Reg.RootKey := HKEY_CURRENT_USER;
  if Reg.OpenKey(ProgramRootKey,true) then begin
   reg.WriteString(keyname,vartostr(keyvalue));
   reg.CloseKey;
   Result := true;
  end;
 finally
  FreeAndNil(Reg);
 end;
end;
 
function RestoreParams(keyname : string; defaultvalue : variant):variant;
 var
  reg : TRegistry;
begin
 Result := defaultvalue;
 if ProgramRootKey = '' then ProgramRootKey := DefProgramRootKey;
 Reg := TRegistry.Create;
 try
  Reg.RootKey := HKEY_CURRENT_USER;
  if Reg.OpenKeyReadOnly(ProgramRootKey) then begin
   Result := reg.ReadString(keyname);
   reg.CloseKey;
  end;
 finally
  FreeAndNil(Reg);
 end;
end;

Приведу пример вызова функций:

 // устанавливаем путь в реестре к вашим параметрам
 ProgramRootKey := '\SOFTWARE\YourCompany\YourOptions'; 
 
 // сохраняем значение MyVar в ключе 'MyKeyName'
 SaveParams('MyKeyName'; MyVar);
 
 // восстанавливаем значение MyVar из ключа 'MyKeyName', если ключа еще нет то значение будет 'hello'
 MyVar := RestoreParams('MyKeyName'; 'hello');
Если вам необходимо сохранять глобально для всех пользователей значения параметров то замените в функциях
Reg.RootKey := HKEY_CURRENT_USER; на Reg.RootKey := HKEY_LOCAL_MACHINE;

 
 

Метки: , 05.01.2011