delphi 中对注册表的操作

前往Delphi专题

在Delphi 中对windows注册表进行查找,读写等操作

Delphi中对注册表的读写过程简介
在DelPhi中为程序员提供了一个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/Borland/Delphi。 
  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/Software/Microsoft/Windows/CurrentVersion下,有三个字符串值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/Microsoft/Windows/CurrentVersion 
   if OpenKey( ′Software/Microsoft/Windows/CurrentVersion′,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/Microsoft/Windows/CurrentVersion/Run′,True) then 
   WriteString(′delphi′,′C:/Program Files/borland/delphi3/bin/delphi32.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/RemoteAccess/Addresses下的数值名称的方法来进行。 

  6.判断数值名称存在、数值名称改名。 
  ValueExists用于判断数值名称是否存在: 
  function ValueExists(const Name: string): Boolean; 
  返回值为True表示数值名称存在。 
  RenameValue用于数值名称改名: 
  procedure RenameValue(const OldName, NewName: string); 

 以上是注册表常用操作所对应的TRegistry的方法和属性,其它方法和属性请参见Delphi联机帮助文件。 
以上程序在PWIN 98+Delphi 3.0下调试通过。

网友评论
最新图文
  • 在delphi 获取特殊目录 SHGetSpecialFolderLocation SHGetPathFromIDList

    在写应用程序的时候,我们经常会用到读取windows系统的一些特殊的目录。比如 桌面 快速启动栏的路径等等。下面介绍两个API函数 SHGetSpecialFolderLocation SHGetPathFromIDList我们先看代码:  代码文件:unit Unit1;interfaceuses Wind,西西hvbet688园-最安全的下载资讯站。

  • Delphi通过ADO读写数据库

    ADO是一种程序对象,用于表示用户数据库中的数据结构和所包含的数据。ADO (ActiveX Data Objects,ActiveX数据对象)是Microsoft提出的应用程序接口(API)用以实现访问关系或非关系数据库中的数据。例如,如果您希,西西hvbet688园-最安全的下载资讯站。

  • Delphi如何实现抓图技术

    摘 要:本文以Delphi7.0作为开发平台,给出了网络监控hvbet688中的两种屏幕抓图技术的设计方法和步骤。介绍了教师在计算机机房内教学时,如何监控学生计算机显示器上的画面,以保证教学的质量和效果。  引言  随着网络技术的飞速发展,计算机网络在各高等院校教学中,西西hvbet688园-最安全的下载资讯站。

  • delphi中使用ADOQuery时的几个问题解决方案

    问题1、文参数的支持问题今天在使用ClientDataSource查询的时候,“divece_name”参数赋值为“%笔记本电脑%”,但是使用SQL Server Profiler跟踪后发现查询的语句变为:查询的数据提交到数据库时不完整,当我把N'@P1varchar(8)', '%笔记本%'就可,西西hvbet688园-最安全的下载资讯站。

  • android计时器、android 格式化时间计数器的实现

    完整的Android程序,主要功能是实现秒表计时需求:默认为"00:00:00",点击开始按钮时清零后开始计时,出现如10:28:34。点击停止的时候停止计时。问题:使用Calendar DateFormat的方法,不设置时区获取到的小时是本地时区的(东八区的就是8),设,西西hvbet688园-最安全的下载资讯站。