📄 025.htm
字号:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI专题文档-程序应用-->在Delphi程序中操作注册表</TITLE>
<META NAME="keywords" CONTENT=" DELPHI专题文档-程序应用 在Delphi程序中操作注册表">
<META NAME="description" CONTENT=" - DELPHI专题文档-程序应用 - 在Delphi程序中操作注册表">
<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋体"}
.tt2 {font: 12pt/15pt "宋体"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<a href="index6.html">返回</a>
<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>
<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷体_GB2312">在Delphi程序中操作注册表</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
<p align="center"><strong><font color="#008000"><span style="font-size: 9pt"></span></font></strong>
<p><span style="font-size: 9pt"><br>
32位Delphi程序中可利用TRegistry对象来存取注册表文件中的信息。</span>
<p><strong><span style="font-size: 9pt"> 一、创建和释放TRegistry对象</span></strong>
<p><span style="font-size: 9pt"> 1.创建TRegistry对象。为了操作注册表,要创建一个TRegistry对象:ARegistry
:= TRegistry.Create;</span>
<p><span style="font-size: 9pt"> 2.释放TRegistry对象。对注册表操作结束后,应释放TRegistry对象所占内存:ARegistry.Destroy。</span>
<p><strong><span style="font-size: 9pt"> 二、指定要操作的键</span></strong>
<p><span style="font-size: 9pt"> 操作注册表时,首先应指定操作的主键:先给属性RootKey赋值以指定根键,然后用方法OpenKey来指定要操作的主键名。</span>
<p><span style="font-size: 9pt"> 1.指定根键(RootKey)。</span>
<p><span style="font-size: 9pt"> 根键是注册表的入口,也注册表信息的分类,其值可为:</span>
<p><span style="font-size: 9pt"> HKEY—CLASSES—ROOT:存储整个系统对象类信息,如ActiveX对象注册、文件关联等信息。</span>
<p><span style="font-size: 9pt"> HKEY—CURRENT—USER:存储当前用户的配置信息。为属性RootKey的默认值。</span>
<p><span style="font-size: 9pt"> HKEY—LOCAL—MACHINE:存储当前系统的软硬件配置信息。应用程序自己的信息可以存储在该根键下。</span>
<p><span style="font-size: 9pt"> HKEY—USERS:存储所有用户通用的配置信息。</span>
<p><span style="font-size: 9pt"> 还可以是HKEY—CURRENT—CONFIG、HKEY—DYN—DATA。</span>
<p><span style="font-size: 9pt"> 2.指定要操作的主键。</span>
<p><span style="font-size: 9pt"> Function OpenKey(const Key: string; CanCreate:
Boolean): Boolean;</span>
<p><span style="font-size: 9pt"> Key:主键名,是键名全名中除去根键的部分,如Software\Borland\Delphi。</span>
<p><span style="font-size: 9pt"> CanCreate:在指定的主键名不存在时,是否允许创建该主键,True表示允许。</span>
<p><span style="font-size: 9pt"> 返回值True表示操作成功。</span>
<p><span style="font-size: 9pt"> 3.关闭当前主键。</span>
<p><span style="font-size: 9pt"> 在读取或存储信息之后,应及时将关闭当前主键:procedure
CloseKey。</span>
<p><strong><span style="font-size: 9pt"> 三、从注册表中读取信息</span></strong>
<p><span style="font-size: 9pt"> Read系列方法从注册表读取指定的信息(字符串、二进制和十六进制),并转换为指定的类型。</span>
<p><span style="font-size: 9pt"> 1.Read系列方法。</span>
<p><span style="font-size: 9pt"> function ReadString(const Name: string): string;</span>
<p><span style="font-size: 9pt"> 读取一个字符串值,Name为字符串名称。</span>
<p><span style="font-size: 9pt"> function ReadInteger(const Name: string): Integer;</span>
<p><span style="font-size: 9pt"> 读取一个整数值,Name为整数名称。</span>
<p><span style="font-size: 9pt"> function ReadBinaryData(const Name: string; var
Buffer; BufSize: Integer):Integer;</span>
<p><span style="font-size: 9pt"> 读取二进制值,Name为二进制值名称,Buffer为接收缓冲区,BufSize为缓冲区大小,返回为实际读取的字节数。</span>
<p><span style="font-size: 9pt"> 其它方法还有:ReadBool、ReadCurrency、ReadDate、ReadDateTime、ReadFloat、ReadTime。</span>
<p><span style="font-size: 9pt"> 2.读取信息一例(显示Windows的版本)。</span>
<p><span style="font-size: 9pt"> 在HKEY—LOCAL—MACHINE\Software\Microsoft\Windows\CurrentVersion下,有三个字符串值Version、VersionNumber和SubVersionNumber,用于记录当前Windows的版本号。</span>
<p><span style="font-size: 9pt"> {请在Uses中包含Registry单元}</span>
<p><span style="font-size: 9pt"> procedure TForm1.Button1Click(Sender:TObject);</span>
<p><span style="font-size: 9pt"> var</span>
<p><span style="font-size: 9pt"> ARegistry : TRegistry;</span>
<p><span style="font-size: 9pt"> begin</span>
<p><span style="font-size: 9pt"> ARegistry := TRegistry.Create;</span>
<p><span style="font-size: 9pt"> //建立一个TRegistry实例</span>
<p><span style="font-size: 9pt"> with ARegistry do</span>
<p><span style="font-size: 9pt"> begin</span>
<p><span style="font-size: 9pt"> RootKey := HKEY—LOCAL—MACHINE;//指定根键为HKEY—LOCAL—MACHINE</span>
<p><span style="font-size: 9pt"> //打开主键Software\Microsoft\Windows\CurrentVersion</span>
<p><span style="font-size: 9pt"> if OpenKey( ′Software\Microsoft\Windows\CurrentVersion′,false
) then</span>
<p><span style="font-size: 9pt"> begin</span>
<p><span style="font-size: 9pt"> memo1.lines.add('Windows版本:′+ ReadString(′Version′));</span>
<p><span style="font-size: 9pt"> memo1.lines.add('Windows版本号:′ +
ReadString(′VersionNumber′));</span>
<p><span style="font-size: 9pt"> memo1.lines.add(′Windows子版本号:′ +
ReadString(′SubVersionNumber′));</span>
<p><span style="font-size: 9pt"> end;</span>
<p><span style="font-size: 9pt"> CloseKey;//关闭主键</span>
<p><span style="font-size: 9pt"> Destroy;//释放内存</span>
<p><span style="font-size: 9pt"> end;</span>
<p><span style="font-size: 9pt"> end;</span>
<p><strong><span style="font-size: 9pt"> 四、向注册表中写入信息</span></strong>
<p><span style="font-size: 9pt"> Write系列方法将信息转化为指定的类型,并写入注册表。</span>
<p><span style="font-size: 9pt"> 1.Write系列方法。</span>
<p><span style="font-size: 9pt"> procedure WriteString(const Name, Value: string);</span>
<p><span style="font-size: 9pt"> 写入一个字符串值,Name为字符串的名称,Value为字符串值。</span>
<p><span style="font-size: 9pt"> procedure WriteInteger(const Name: string; Value:
Integer);</span>
<p><span style="font-size: 9pt"> 写入一个整数值。</span>
<p><span style="font-size: 9pt"> procedure WriteBinaryData(const Name: string; var
Buffer; BufSize: Integer);</span>
<p><span style="font-size: 9pt"> 写入二进制值,Name为二进制值的名称,Buffer为包含二进制值的缓冲区,BufSize为缓冲区大小。</span>
<p><span style="font-size: 9pt"> 其它方法还有:WriteBool、WriteCurrency、WriteDate、WriteDateTime、WriteFloat、WriteTime。</span>
<p><span style="font-size: 9pt"> 2.写入信息一例。</span>
<p><span style="font-size: 9pt"> 下面程序使Delphi随Windows启动而自动运行。</span>
<p><span style="font-size: 9pt"> var</span>
<p><span style="font-size: 9pt"> ARegistry : TRegistry;</span>
<p><span style="font-size: 9pt"> begin</span>
<p><span style="font-size: 9pt"> ARegistry := TRegistry.Create; </span>
<p><span style="font-size: 9pt"> //建立一个TRegistry实例</span>
<p><span style="font-size: 9pt"> with ARegistry do</span>
<p><span style="font-size: 9pt"> begin</span>
<p><span style="font-size: 9pt"> RootKey:=HKEY—LOCAL—MACHINE;</span>
<p><span style="font-size: 9pt"> if OpenKey(′Software\Microsoft\Windows\CurrentVersion\Run′,True)
then</span>
<p><span style="font-size: 9pt"> WriteString(′delphi′,′C:\Program
Files\borland\delphi3\bin\delphi32.exe′);</span>
<p><span style="font-size: 9pt"> CloseKey;</span>
<p><span style="font-size: 9pt"> Destroy;</span>
<p><span style="font-size: 9pt"> end;</span>
<p><span style="font-size: 9pt"> end;</span>
<p><strong><span style="font-size: 9pt"> 五、键值维护</span></strong>
<p><span style="font-size: 9pt"> 除了在注册表中读取、存储外,程序可能还需要增加主键、删除主键、主键改名、数据值改名等。</span>
<p><span style="font-size: 9pt"> 1.创建新主键:function CreateKey(const Key:
string): Boolean。</span>
<p><span style="font-size: 9pt"> Key即为主键名,返回值True表示操作成功。</span>
<p><span style="font-size: 9pt"> 2.删除主键:function DeleteKey(const Key:
string): Boolean。</span>
<p><span style="font-size: 9pt"> Key即为主键名,返回值True表示操作成功。</span>
<p><span style="font-size: 9pt"> 3.复制或移动主键:procedure MoveKey(const
OldName, NewName: string; Delete: Boolean)。</span>
<p><span style="font-size: 9pt"> OldName、NewName分别表示源主键名和目标主键名;Delete表示是否删除源主键,True表示删除,False表示保留。</span>
<p><span style="font-size: 9pt"> 复制或移动一个主键将复制或移动该子键下的所有数据值和子键内容。</span>
<p><span style="font-size: 9pt"> 4.判断指定主键是否存在,其下是否有主键,并获取主键名称。</span>
<p><span style="font-size: 9pt"> KeyExists用于判断指定主键是否存在:</span>
<p><span style="font-size: 9pt"> function KeyExists(const Key: string): Boolean;//返回值为True表示主键存在。</span>
<p><span style="font-size: 9pt"> HasSubKeys用于判断指定主键下是否有子键:function
HasSubKeys: Boolean;</span>
<p><span style="font-size: 9pt"> 返回值为True表示主键下有子键。</span>
<p><span style="font-size: 9pt"> GetKeyNames用于获取子键名称:procedure
GetKeyNames(Strings: TStrings);</span>
<p><span style="font-size: 9pt"> Strings用于返回当前主键下各子键的名称。</span>
<p><span style="font-size: 9pt"> 5.获取主键下的数据值名称:procedure
GetValueNames(Strings: TStrings)。</span>
<p><span style="font-size: 9pt"> Strings用于返回当前主键下各数值名称。</span>
<p><span style="font-size: 9pt"> 如要获取当前系统中的拨号连接名称,可利用获取主键HKEY—USERS</span>
<p><span style="font-size: 9pt"> \.DEFAULT\RemoteAccess\Addresses下的数值名称的方法来进行。</span>
<p><span style="font-size: 9pt"> 6.判断数值名称存在、数值名称改名。</span>
<p><span style="font-size: 9pt"> ValueExists用于判断数值名称是否存在:</span>
<p><span style="font-size: 9pt"> function ValueExists(const Name: string): Boolean;</span>
<p><span style="font-size: 9pt"> 返回值为True表示数值名称存在。</span>
<p><span style="font-size: 9pt"> RenameValue用于数值名称改名:</span>
<p><span style="font-size: 9pt"> procedure RenameValue(const OldName, NewName:
string);</span>
<p><span style="font-size: 9pt"> 以上是注册表常用操作所对应的TRegistry的方法和属性,其它方法和属性请参见Delphi联机帮助文件。</span>
<p><span style="font-size: 9pt"> 以上程序在PWIN 98+Delphi 3.0下调试通过。<br>
</span></p>
<BR>
<hr color="#EE9B73" size="1" width="94%">
</TD>
</TR>
</table>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -