在Delphi程序中操作注册表(转)

本文介绍如何使用Delphi中的TRegistry对象进行注册表的基本操作,包括创建与释放TRegistry对象、指定操作键、读写注册表信息及键值维护等。

   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。  
   
    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下,有三个字符串值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  
   
       if   OpenKey(   ′Software′,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′,True)   then  
   
       WriteString(′delphi′,′C:Files.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下的数值名称的方法来进行。  
   
    6.判断数值名称存在、数值名称改名。  
   
    ValueExists用于判断数值名称是否存在:  
   
    function   ValueExists(const   Name:   string):   Boolean;  
   
    返回值为True表示数值名称存在。  
   
    RenameValue用于数值名称改名:  
   
    procedure   RenameValue(const   OldName,   NewName:   string);  
   
    以上是注册表常用操作所对应的TRegistry的方法和属性,其它方法和属性请参见Delphi联机帮助文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值