在Delphi程序中操作注册表

在Delphi程序中操作注册表

32位Delphi程序中可利用TRegistry对象来存取注册表文件中的信息。

  一、创建和释放TRegistry对象

  1.创建TRegistry对象。为了操作注册表,要创建一个TRegistry对象:ARegistry := TRegistry.Create;

  2.释放TRegistry对象。对注册表操作结束后,应释放TRegistry对象所占内存:ARegistry.Destroy。

  二、指定要操作的键

  操作注册表时,首先应指定操作的主键:先给属性RootKey赋值以指定根键,然后用方法OpenKey来指定要操作的主键名。

  1.指定根键(RootKey)。
  根键是注册表的入口,也注册表信息的分类,其值可为:
  HKEY—CLASSES—ROOT:存储整个系统对象类信息,如ActiveX对象注册、文件关联等信息。
  HKEY—CURRENT—USER:存储当前用户的配置信息。为属性RootKey的默认值。
  HKEY—LOCAL—MACHINE:存储当前系统的软硬件配置信息。应用程序自己的信息可以存储在该根键下。
   HKEY—USERS:存储所有用户通用的配置信息。
  还可以是HKEY—CURRENT—CONFIG、HKEY—DYN—DATA。

  2.指定要操作的主键。
  Function OpenKey(const Key: string; CanCreate: Boolean): Boolean;
  Key:主键名,是键名全名中除去根键的部分,如Software/Borland/Delphi。
  CanCreate:在指定的主键名不存在时,是否允许创建该主键,True表示允许。
  返回值True表示操作成功。

  3.关闭当前主键。
  在读取或存储信息之后,应及时将关闭当前主键:procedure CloseKey。

  三、从注册表中读取信息
  Read系列方法从注册表读取指定的信息(字符串、二进制和十六进制),并转换为指定的类型。

  1.Read系列方法。
  function ReadString(const Name: string): string;
  读取一个字符串值,Name为字符串名称。
  function ReadInteger(const Name: string): Integer;
  读取一个整数值,Name为整数名称。
  function ReadBinaryData(const Name: string; var Buffer; BufSize: Integer):Integer;
  读取二进制值,Name为二进制值名称,Buffer为接收缓冲区,BufSize为缓冲区大小,返回为实际读取的字节数。
  其它方法还有:ReadBool、ReadCurrency、ReadDate、ReadDateTime、ReadFloat、ReadTime。

  2.读取信息一例(显示Windows的版本)。
   在HKEY—LOCAL—MACHINE/Software/Microsoft/Windows/CurrentVersion下,有三个字符串值Version、VersionNumber和SubVersionNumber,用于记录当前Windows的版本号。

  {请在Uses中包含Registry单元}
  procedure TForm1.Button1Click(Sender:TObject);
  var
   ARegistry : TRegistry;
  begin
   ARegistry := TRegistry.Create;
  //建立一个TRegistry实例
   with ARegistry do
    begin
     RootKey := HKEY—LOCAL—MACHINE;//指定根键为HKEY—LOCAL—MACHINE
     //打开主键Software/Microsoft/Windows/CurrentVersion
     if OpenKey( ′Software/Microsoft/Windows/CurrentVersion′,false ) then
     begin
      memo1.lines.add('Windows版本:′+ ReadString(′Version′));
      memo1.lines.add('Windows版本号:′+ ReadString(′VersionNumber′));
      memo1.lines.add(′Windows子版本号:′+ ReadString(′SubVersionNumber′));
     end;
    CloseKey;//关闭主键
     Destroy;//释放内存
   end;
  end;

  四、向注册表中写入信息
  Write系列方法将信息转化为指定的类型,并写入注册表。

  1.Write系列方法。
  procedure WriteString(const Name, Value: string);
  写入一个字符串值,Name为字符串的名称,Value为字符串值。
  procedure WriteInteger(const Name: string; Value: Integer);
  写入一个整数值。
  procedure WriteBinaryData(const Name: string; var Buffer; BufSize: Integer);
  写入二进制值,Name为二进制值的名称,Buffer为包含二进制值的缓冲区,BufSize为缓冲区大小。
  其它方法还有:WriteBool、WriteCurrency、WriteDate、WriteDateTime、WriteFloat、WriteTime。

  2.写入信息一例。
  下面程序使Delphi随Windows启动而自动运行。

  var
   ARegistry : TRegistry;
  begin
   ARegistry := TRegistry.Create; 
  //建立一个TRegistry实例
   with ARegistry do
   begin
   RootKey:=HKEY—LOCAL—MACHINE;
    if OpenKey(′Software/Microsoft/Windows/CurrentVersion/Run′,True) then
    WriteString(′delphi′,′C:/Program Files/borland/delphi3/bin/delphi32.exe′);
    CloseKey;
    Destroy;
   end;
  end;

  五、键值维护
  除了在注册表中读取、存储外,程序可能还需要增加主键、删除主键、主键改名、数据值改名等。

  1.创建新主键:function CreateKey(const Key: string): Boolean。
  Key即为主键名,返回值True表示操作成功。

  2.删除主键:function DeleteKey(const Key: string): Boolean。
  Key即为主键名,返回值True表示操作成功。

  3.复制或移动主键:procedure MoveKey(const OldName, NewName: string; Delete: Boolean)。
  OldName、NewName分别表示源主键名和目标主键名;Delete表示是否删除源主键,True表示删除,False表示保留。
  复制或移动一个主键将复制或移动该子键下的所有数据值和子键内容。

  4.判断指定主键是否存在,其下是否有主键,并获取主键名称。
  KeyExists用于判断指定主键是否存在:
  function KeyExists(const Key: string): Boolean;//返回值为True表示主键存在。
  HasSubKeys用于判断指定主键下是否有子键:function HasSubKeys: Boolean;
  返回值为True表示主键下有子键。
   GetKeyNames用于获取子键名称:procedure GetKeyNames(Strings: TStrings);
   Strings用于返回当前主键下各子键的名称。

  5.获取主键下的数据值名称:procedure GetValueNames(Strings: TStrings)。
  Strings用于返回当前主键下各数值名称。
  如要获取当前系统中的拨号连接名称,可利用获取主键HKEY—USERS /.DEFAULT/RemoteAccess/Addresses下的数值名称的方法来进行。

  6.判断数值名称存在、数值名称改名。
  ValueExists用于判断数值名称是否存在:
  function ValueExists(const Name: string): Boolean;
  返回值为True表示数值名称存在。
  RenameValue用于数值名称改名:
  procedure RenameValue(const OldName, NewName: string);

   以上是注册表常用操作所对应的TRegistry的方法和属性,其它方法和属性请参见Delphi联机帮助文件。

 

4、 从注册表删除关键字或指定的数据值
使用Tregistry中提供的DeleteKey和DeleteValue方法可以删除指定的关键字和数据值。这两个方法的原型定义如下:
function DeleteKey(const Key : string) : Boolean;
function DeleteValue(const Key : string) : Boolean;
使用DeleteKey方法删除指定的关键字时,如果被删除的关键字在任何层次有子关键字,它们将同时被删除。上面两个方法在执行时,如果删除成功,则返回True;否则返回False。
示例程序如下:
procedure TForm1.Button1Click(Sender: TObject);
var
MyReg : TRegistry;
begin
MyReg := TRegistry.Create;
MyReg.RootKey := HKEY_LOCAL_MACHINE;
try
if not MyReg.OpenKey('/SOFTWARE/Passwd',FALSE) then ;
if MyReg.DeleteValue('pwd1') then
label1.Caption := 'value [pwd1] has deleted!';
MyReg.CloseKey;
if not MyReg.OpenKey('/SOFTWARE/',FALSE) then ;
if MyReg.DeleteKey('Passwd') then
label2.Caption := 'Key [passwd] has deleted!';
MyReg.CloseKey;
finally
MyReg.Free;
end;
end; 
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值