⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reg.pas

📁 Delphi的另一款钢琴软件
💻 PAS
字号:
unit Reg;

interface

uses SysUtils, Classes, Windows;

type
TReg = class
private
  fKey : HKey;
  root : HKey;

public
  constructor Create (rt : HKey; path : string; allowCreate : boolean);
  destructor Destroy; override;
  procedure WriteString (name : string; value : string);
  function ReadStringDef (name : string; default : string) : string;

  procedure WriteInteger (name : string; value : Integer);
  function ReadIntegerDef (name : string; default : Integer) : Integer;

  procedure WriteBoolean (name : string; value : Boolean);
  function ReadBooleanDef (name : string; default : Boolean ) : Boolean;

  procedure DeleteValue (name: string);

  property Key : HKey read fKey;
end;

implementation

constructor TReg.Create (rt : HKey; path : string; allowCreate : boolean);
var
  res, disposition : Integer;
begin
  root := rt;
  if allowCreate then
    res := RegCreateKeyEx (root, PChar (path), 0, '', REG_OPTION_NON_VOLATILE, KEY_READ or KEY_WRITE, Nil, Fkey, @disposition)
  else
    res := RegOpenKeyEx (root, PChar (path), 0, KEY_READ or KEY_WRITE, fKey);

  if res <> ERROR_SUCCESS then
    raise Exception.CreateFmt ('Error %d opening registry key %s', [res, path]);
end;

destructor TReg.Destroy;
begin
  RegCloseKey (fKey);
end;

procedure TReg.WriteString (name : string; value : string);
var res : Integer;
begin
  res := RegSetValueEx (fKey, PChar (name), 0, REG_SZ, @value [1], Length (value) + 1);
  if res <> ERROR_SUCCESS then
    raise Exception.CreateFmt ('Error %d writing registry value %s', [res, name]);
end;

function TReg.ReadStringDef (name : string; default : string) : string;
var
  valueType, len, res : Integer;
  value : string;

begin
  len := 256;
  SetLength (value, len - 1);

  res := RegQueryValueEx (fKey, PChar (name), Nil, @valueType, @value [1], @len);
  if res = ERROR_MORE_DATA then
  begin
    SetLength (value, len - 1);
    res := RegQueryValueEx (fKey, PChar (name), Nil, @valueType, @value [1], @len)
  end
  else SetLength (value, len - 1);

  if res <> ERROR_SUCCESS then
    result := default
  else
    result := value
end;

procedure TReg.WriteInteger (name : string; value : Integer);
var res : Integer;
begin
  res := RegSetValueEx (fKey, PChar (name), 0, REG_DWORD, @value, sizeof (value));
  if res <> ERROR_SUCCESS then
    raise Exception.CreateFmt ('Error %d writing registry value %s', [res, name]);
end;

function TReg.ReadIntegerDef (name : string; default : Integer) : Integer;
var value, valueType, len : Integer;
begin
  len := sizeof (value);
  if RegQueryValueEx (fKey, PChar (name), Nil, @valueType, @value, @len) = ERROR_SUCCESS then
    result := value
  else
    result := default
end;

procedure TReg.WriteBoolean (name : string; value : Boolean);
var
 val : Integer;
begin
  val := Ord (value);
  WriteInteger (name, val);
end;

function TReg.ReadBooleanDef (name : string; default : Boolean) : boolean;
var value, len, valueType : Integer;
begin
  len := sizeof (value);
  if RegQueryValueEx (fKey, PChar (name), Nil, @valueType, @value, @len) = ERROR_SUCCESS then
    result := value <> 0
  else
    result := default
end;

procedure TReg.DeleteValue (name: string);
var res : Integer;
begin
  res := RegDeleteValue (fKey, PChar (name));
  if res <> ERROR_SUCCESS then
    raise Exception.CreateFmt ('Error %d deleting registry value %s', [res, name]);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -