Delphi中对注册表的操作

IT商界

  在编程的时候,利用好Windows的注册表是非常重要的,里面存储有很多信息。在开发Windows平台下的应用程序时,经常要访问和修改注册表,对注册表的操作是进行软件开发的一项重要技能。

  那么如何在Delphi中对注册表进行访问和修改呢?下面就来讨论这个问题。

  Delphi中提供了几个注册表类,通过对注册表的类对象的操作我们就可以在程序中很方便地访问和修改Windows操作系统的注册表了。Delphi中提供的注册表类主要有:TRegistryIniFile、TRegIniFile、ERegistryE xception和TRegistry。前两种主要是为了兼容Win 3.x下的INI文件,按照操作INI文件的方式来操作注册表;ERegistryException用来在程序中对注册表访问失败时进行异常处理;TRegistry是Delphi对注册表进行全面操作的类,通过它提供的属性和方法我们就可以完成创建主键、删除主键和读写键值等操作。下面我们只讨论TRegistry的用法。

  具体方法为:首先声明一个变量,变量的类型为TRegistry,例如:var WinRegistry:TRegistry;然后创建WinRegistry:=TRegistry.Create。当类型为TRegistry的变量创建好以后,就可以使用它来访问注册表了。其中,TRegistry的属性RootKey表明当前是针对哪一个根(Root)进行操作。在Windows 98的注册表中有6个根主键,它们是:

  HKEY_CLASSES_ROOT;

  HKEY_CURRENT_USER;

  HKEY_LOCAL_MACHINE;

  HKEY_USERS;

  HKEY_CURRENT_CONFIG;

  HKEY_DYN_DATA;

  注:可以在Windows系统中使用RegEdit.exe来查看。

  例如:使用语句WinRegistry.RootKey:= HKEY_CURRENT_CONFIG;可以使当前的根改变成HKEY_CURRENT_CONFIG。

  另外,使用TRegistry的OpenKey方法来打开分支,使用ReadString、ReadInteger…来读取值。事实上,注册表中的一个个分支就像DOS下的子目录,一个个值就像文件。使用OpenKey方法来改变子目录,而使用ReadString、ReadInteger……方法来读取子目录下某个文件的内容。

  例如:使用WinRegistry.OpenKey('\Dis play\Settings',False);来打开分支HKEY_CURRENT_CONFIG\\Display\Settings(假设WinRegistry.RootKey的值为HKEY_CURRENT_CONFIG),再使用WinRegistry. ReadString('Resolution')来读取名称为'Resolution'的值的内容(该内容为当前屏幕分辨率设置)。改变新建注册表的子键,键值的原理同上。

  下面举一实例来进一步具体说明TRegistry对象的用法。

  使用Delphi 5开发应用程序的人一般都使用过制作安装程序软件InstallShield,在制作安装程序时,“Dialog Box”中有一项“User Information”,如果选中该项,制作的安装程序在安装时就会要求用户输入用户信息,包括用户姓名、公司、序列号等选项。为了用户安装时的方便,可以通过注册表让安装程序根据注册表的信息自动填写用户信息。那么如何在制作时获取这些信息呢?

  1.在单元接口Users中加入Registry单元,因为TRegistry是在Registry单元中声明的;

  2.定义下列变量:

  var

  Name:string;

  Company:string;

  Registry: TRegistry;

  3.添加下面的程序代码:

  begin

  Registry:= TRegistry.Create;

  Registry.RootKey:=HKEY_LOCAL_MACHINE;

  Registry.OpenKey('SOFTWARE\ Temp',False);

  Name:= Registry.ReadString('Name');

  Company:= Registry.ReadString('Company');

  End;

  这样,安装程序时就能自动读取注册表中的用户信息了。