中国人民银行郑州培训学院 信息部 潘汉杰
Windows注册表跟踪记录了操作系统和各种在系统上安装的应用程序的有关信息。注册表是一个分层数据库。该数据库包含以特定格式表示的配置信息,并且可以直接通过
注册表编辑器程序编辑,也可以通过应用
程序修改。在早期的Windows版本中,INI文件粗略地完成了这一功能,尽管注册表与INI文件有一些相似之处,但不管怎样,由于组织结构的原因,注册表比传统的INI文件要复杂得多。
注册表分成若干个主要部分,各个部分(或者说关键字)包含了不同种类的系统信息。比如说,当你创建一个应用程序时,你可以在HKEY_LOCAL_MACHINE这个部分的SOFTWARE子节中注册你的配置信息。应用程序可以把配置信息以多种数据类型(包括字符串、货币、日期、浮点数和布尔值)的形式保存在关键字中。本文通过实例介绍在Delphi的应用程序中如何对Windows 98的注册表进行操作(如:创建关键字、获取一个关键字的数据值、删除关键字、删除关键字中的数据值等),下列示例
程序均在Delphi 4.0中调试通过,请放心使用。
Delphi中定义了一个Tregistry类,通过使用这个类中封装的很多有关对注册表操作的方法和属性可以完成对注册表的操作。
1、 在注册表中创建一个新的关键字
Tregistry类中有一个CreateKey方法,使用该方法可以在注册表中创建一个新的关键字,该方法的原型声明为:function CreateKey(const Key: string) : Boolean;
示例代码如下:
unit passwd;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Registry;
type
Tpassword = class(TForm)
Label1: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
implementation
{$R *.DFM}
procedure Tpassword.Button1Click(Sender: TObject);
var
MyReg : TRegistry;
begin
MyReg := TRegistry.Create;
MyReg.RootKey := HKEY_LOCAL_MACHINE;
try
if MyReg.OpenKey(''\SOFTWARE\'',FALSE) then
if not MyReg.KeyExists(''Passwd'') then
begin
MyReg.CreateKey(''Passwd'');
if MyReg.OpenKey(''\SOFTWARE\Passwd'',FALSE) then
Label1.Caption := ''关键字Passwd已建立!''
else
Label1.Caption := ''关键字Passwd无法建立!'';
end
else
Label1.Caption := ''关键字Passwd已经存在!''
else
Label1.Caption := ''注册表打不开!'';
MyReg.CloseKey;
finally
MyReg.Free;
end;
end;
end.
2、 向注册表关键字中写入相关的数据值
在Tregistry类中提供了一系列的Write方法用来写入与当前关键字相关的数据值。常用方法的原型定义如下:
procedure WriteString(const Name, Value : string);
procedure WriteInteger(const Name : string ; Value : Integer);
procedure WriteFloat(const Name : string ; Value : Double);
procedure WriteTime(const Name : string ; Value : TDateTime);
procedure WriteBool(const Name : string ; Value : Boolean);
示例代码:
procedure TForm1.Button1Click(Sender: TObject);
var
MyReg : TRegistry;
begin
MyReg := TRegistry.Create;
MyReg.RootKey := HKEY_LOCAL_MACHINE;
try
if not MyReg.OpenKey(''\SOFTWARE\'',FALSE) then ;
if not MyReg.KeyExists(''Passwd'') then
MyReg.CreateKey(''Passwd'');
if not MyReg.OpenKey(''\SOFTWARE\Passwd'',FALSE) then ;
MyReg.WriteString(''pwd1'',''mypassword1'');
MyReg.WriteInteger(''pd2'',19642);
MyReg.CloseKey;
finally
MyReg.Free;
end;
end;
3、 从注册表关键字中读