电脑爱好者之家移动版

主页 > 开发资料 > 程序设计教程 > DELPHI程序设计 >

Delphi如何操作注册表

uses Registry

 

 

在应用程序中,经常需要对注册表进行各种操作,如将程序名称、安装路径等信息保存到注册表中。Delphi对相应API函数做了进一步封装,使得在应用程序中操作注册表更加简单。

1、原理

Delphi提供了TRegistry类,它直接继承自TObject类,主要属性有:RootKey等,主要方法有:

Create,

CreateKey(Key),

OpenKey(Key,CanCreate),

WriteString(Name,Value),ReadString(Name),

CloseKey,

Free等,下面对它们进行简单介绍。

1、1、RootKey属性

指定当前操作的注册表主键,共有HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS、HKEY_CURRENT_CONFIG五种取值,默认值为HKEY_CURRENT_USER。

1、2、CreateKey方法

    函数声明为function CreateKey(const Key: String):Boolean;,用于在注册表中新建项,项的名称为参数Key的值。

1、3、OpenKey方法

    函数声明为function OpenKey(const Key: String; CanCreate: Boolean):Boolean;,其中参数Key指定要打开的注册表的项,参数CanCreate指明当要打开的项不存在时是否创建,默认值为False;函数返回值为布尔类型,如果打开成功返回True,否则返回False。

1、4、WriteString方法

    过程声明为procedure WriteString(const Name, Value: String);,其中参数Name指明要写入的注册表的字符串的名称,参数Value为要写入的字符串的值。如果该字符串不存在则写入,否则覆盖原来的取值。

1、5、ReadString方法

    函数声明为function ReadString(const Name: String):String;,其中参数Name为要读取的字符串的名称,函数返回值为要读取的字符串的值,是字符串类型。如果该字符串在注册表中不存在,返回值为空字符串。

1.6  deletevalue('name')

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

        WriteBinaryData('HistPaths',buf,0);


例如: 将一个POP3 Server的的值为 pop.126.com
需要使用程序实现,将 pop.126.com  写进注册表,变成下面的值:

"POP3 Server"=hex:70,00,6f,00,70,00,2e,00,31,00,32,00,36,00,2e,00,63,00,6f,00,\
  6d,00,00,00


先进行格式转换,即把
pop.126.com 
转换成:
hex:70,00,6f,00,70,00,2e,00,31,00,32,00,36,00,2e,00,63,00,6f,00,6d,00,00,00 

 

uses
  Registry;
procedure TForm2.FormCreate(Sender: TObject);
var
  i,len:integer;
  Buf:array   of   byte;
  R:TRegistry;
  Str:WideString;
begin
  Str := 'pop.126.com';
  len:=length(Str);
  SetLength(Buf,(len+1)*sizeof(WideChar));
  fillchar( Buf[0],Length(buf),0);
//  for   i:=0   to   len-1     do
//  begin
//    Buf[i]:=ord(Str[i+1]);
//  end;
  Move( Byte(Str[1]),Buf[0],len*sizeof(WideChar));
  R:=TRegistry.Create;
  Try
    R.RootKey := HKEY_CURRENT_USER;
    if R.OpenKey('Software\test',Truethen
      try
        R.WriteBinaryData('Display Name',Buf[0],Length(Buf));
      finally
        R.CloseKey;
      end;
  Finally
    R.Free;
  End;
end;


 

 

2、实例

    下面分别为将信息写入注册表和从注册表中读取信息的例子。

2、1、将信息写入注册表

    相应代码如下:

var

   reg:TRegistry;//声明一个TRegistry类变量

   …

begin

   reg:=TRegistry.Create;//创建实例

   reg.RootKey:=HKEY_CURRENT_USER;//指定需要操作的注册表的主键

   if reg.OpenKey(’\Software\Delphi使用技巧’,true) then//如果打开成功则进行以下操作

   begin

     reg.WriteString(’文章名称’,'在Delphi中轻松操作注册表’);//将需要保存的信息写入注册表

     reg.CloseKey;//关闭注册表

   end;

   reg.Free;//释放变量所占内存

   …

end;

2、2、从注册表中读取信息

    相应代码如下:

var

   reg:TRegistry;//声明一个TRegistry类变量

   s:String;//声明一个字符串变量用来存放要读取的信息

   …

begin

   reg:=TRegistry.Create;//创建实例

   reg.RootKey:=HKEY_CURRENT_USER;//指定需要操作的注册表的主键

   if reg.OpenKey(’\Software\Delphi使用技巧’,true) then//如果打开成功则进行以下操作

   begin

     s:=reg.ReadString(’文章名称’);//从注册表中读取对应字符串的值

     //如果该字符串不存在则返回值为空字符串

     reg.CloseKey;//关闭注册表

   end;

   reg.Free;//释放变量所占内存

   …

end;

3、总结

本文首先介绍了在Delphi中操作注册表的方法,然后举例说明了具体应用。

(责任编辑:熊猫蜀黍)