在Delphi中如何对注册表进行操作
点击次数:67 次 发布日期:2008-11-09 08:38:33 作者:源代码网
|
源代码网推荐 源代码网推荐 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("SOFTWAREPasswd",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"); 软件开发网 www.mscto.com 源代码网推荐 if not MyReg.OpenKey("SOFTWAREPasswd",FALSE) then ; 源代码网推荐 MyReg.WriteString("pwd1","mypassword1"); 源代码网推荐 MyReg.WriteInteger("pd2",19642); 源代码网推荐 MyReg.CloseKey; 源代码网推荐 finally 源代码网推荐 MyReg.Free; 源代码网推荐 end; 源代码网推荐 end; 源代码网推荐 3、 从注册表关键字中读出相关的数据值 源代码网推荐 在Tregistry类中还提供了与Write方法相对应用的用来读出与当前关键字相关的数据值。常用方法的原型定义如下: 源代码网推荐 founction ReadString(const Name : string) : string; 源代码网推荐 founction ReadInteger(const Name : string) : Integer; 源代码网推荐 founction ReadFloat(const Name : string) : Double; 源代码网推荐 founction ReadTime(const Name : string) : TdateTime; 源代码网推荐 founction ReadBool(const Name) : 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 ; 源代码网推荐 if not MyReg.OpenKey("SOFTWAREPasswd",FALSE) then ; 源代码网推荐 Label1.Caption := MyReg.ReadString("pwd1"); 源代码网推荐 Label2.Caption := IntToStr(MyReg.ReadInteger("pd2")); 源代码网推荐 MyReg.CloseKey; 源代码网推荐 finally 源代码网推荐 MyReg.Free; 源代码网推荐 end; 源代码网推荐 end; 源代码网推荐 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("SOFTWAREPasswd",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; 源代码网推荐 通过上面的实例我们简单介绍了Delphi中对注册表的相关操作。在Tregistry类中还有很多对注册表的关键字和数据值的操作方法,但其基本的操作方法和上面的示例程序在同小异,限于篇幅就不赘述了。 源代码网推荐 源代码网供稿. |
