一、创建和释放TRegistry对象
1.创建TRegistry对象。为了操作注册表,要创建一个TRegistry对象:ARegistry
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
Key:主键名,是键名全名中除去根键的部分,如Software\Borland\Delphi。
CanCreate:在指定的主键名不存在时,是否允许创建该主键,True表示允许。
返回值True表示操作成功。
3.关闭当前主键。
在读取或存储信息之后,应及时将关闭当前主键:procedure
三、从注册表中读取信息
Read系列方法从注册表读取指定的信息(字符串、二进制和十六进制),并转换为指定的类型。
1.Read系列方法。
function
读取一个字符串值,Name为字符串名称。
function
读取一个整数值,Name为整数名称。
function
读取二进制值,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
var
begin
//建立一个TRegistry实例
end;
四、向注册表中写入信息
Write系列方法将信息转化为指定的类型,并写入注册表。
1.Write系列方法。
procedure
写入一个字符串值,Name为字符串的名称,Value为字符串值。
procedure
写入一个整数值。
procedure
写入二进制值,Name为二进制值的名称,Buffer为包含二进制值的缓冲区,BufSize为缓冲区大小。
其它方法还有:WriteBool、WriteCurrency、WriteDate、WriteDateTime、WriteFloat、WriteTime。
2.写入信息一例。
下面程序使Delphi随Windows启动而自动运行。
var
begin
//建立一个TRegistry实例
end;
五、键值维护
除了在注册表中读取、存储外,程序可能还需要增加主键、删除主键、主键改名、数据值改名等。
1.创建新主键:function
Key即为主键名,返回值True表示操作成功。
2.删除主键:function
Key即为主键名,返回值True表示操作成功。
3.复制或移动主键:procedure
OldName、NewName分别表示源主键名和目标主键名;Delete表示是否删除源主键,True表示删除,False表示保留。
复制或移动一个主键将复制或移动该子键下的所有数据值和子键内容。
4.判断指定主键是否存在,其下是否有主键,并获取主键名称。
KeyExists用于判断指定主键是否存在:
function
HasSubKeys用于判断指定主键下是否有子键:function
返回值为True表示主键下有子键。
GetKeyNames用于获取子键名称:procedure
Strings用于返回当前主键下各子键的名称。
5.获取主键下的数据值名称:procedure
Strings用于返回当前主键下各数值名称。
如要获取当前系统中的拨号连接名称,可利用获取主键HKEY—USERS
6.判断数值名称存在、数值名称改名。
ValueExists用于判断数值名称是否存在:
function
返回值为True表示数值名称存在。
RenameValue用于数值名称改名:
procedure
以上是注册表常用操作所对应的TRegistry的方法和属性,其它方法和属性请参见Delphi联机帮助文件。
以上程序在PWIN
2003-11-20
查看评语»»»
2003-11-20
我用的是
1。关于
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC
有你的
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC
列出了你的所有
关于
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI
列出了你的所有
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI
列出了你的所有
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI
列出了你的所有
知道了以上的几个主键后,你就可以在程序中实现
HKEY_LOCAL_MACHINE\SOFTWARE\Borland\Database
下面是你的
2。关于
HKEY_CLASSES_ROOT\htmlfile
系统对
HKEY_LOCAL_MACHINE\SOFTWARE\Clients
INTERNET
HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail。
3。关于
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
每次该用户启动
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Runonce
该用户启动
以上两处是针对特定用户的,在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
2003-11-20
在Delphi3.0
----
助):
RootKey、CreateKey、OpenKey、CloseKey、DeleteKey、ReadXXXX、WriteXXXX
(XXXX表示数据类型如String、Integer等)
我们用到的属性和方法有:
RootKey:注册表的根键名(
OpenKey(
使当前键为KeyName,CanCreate
SetKey(
----
当然,你可以在"启动"程序组中加入程序的快捷方式,但这样做好象不大明智,因为大多数程序在安装时不会这样做,而是在通过在注册表增加键值,让WIN95/98/NT
首先,在Uses
然后,写下面代码。
{将程序strExeFileName置为自动启动
function
var
registerTemp
begin
registerTemp
//建立一个Registry实例
with
begin
RootKey:=HKEY_LOCAL_MACHINE;
//设置根键值为HKEY_LOCAL_MACHINE
//找到Software\Microsoft\Windows\CurrentVersion\Run
if
//写入自己程序的快捷方式信息
begin
WriteString(
result
end
else
//善后处理
CloseKey;
Free;
end;
end;
{调用StartUpMyProgram,
使Delphi随WINDOWS启动而自动运行
procedure
begin
memo1.lines.add('开始');
if
memo1.lines.add('成功')
else
memo1.lines.add('失败')
end;
----
当MS
你也可以在这里增加一个键,建立自己的文件关联。
建立文件关联,一般应有两个步骤:
(1)根据文件类型的扩展名,指定对应的键名(如doc
该键及其子键的值,将定义该类型的文件的类型说明和操作(如打开、编辑)说明
(2)在指定的键名下,建立子键,指明文件类型说明和操作对应的程序信息
例如,我们可以为.DBF
HKEY_CLASSES_ROOT\DBF_Auto_File,并设其默认值为"xBase
具体实现如下:同样,在Uses
{将文件类型strFileExtension与程序
strExeFileName相关联,strDiscription为文件类型说明
function
var
registerTemp
begin
registerTemp
//建立一个Registry实例
with
begin
RootKey:=HKEY_CLASSES_ROOT;
//设置根键值为HKEY_CLASSES_ROOT
//根据文件类型的扩展名,创建或打开对应的键名.FileExt,如DBF对应'.DBF'
if
begin
result
exit;
end;
//设置键.FileExt默认值为FileExt_Auto_File,如'.DBF'对应'DBF_Auto_File'
WriteString('',strFileExtension
CloseKey;
//写入自己程序的信息
//根据文件类型的扩展名,创建或打开对应的键名
FileExt_Auto_File
//'.DBF'对应'DBF_Auto_File'
if
begin
result
exit;
end;
//设置默认值文件类型说明,如DBF可对应'xBase数据表'
WriteString('',strDiscription);
CloseKey;
//创建或打开键名FileExt_Auto_File\Shell\open\command,该键为表示操作为'打开'
//'.DBF'对应'DBF_Auto_File\shell\open\command'
if
begin
result
exit;
end;
//设置该键的默认值为打开操作对应的程序信息
//如DBF可对应'C:\Program
WriteString('',strExeFileName
CloseKey;
Free;
end;
end;
{调用AssignToProgram,使DBF文件与DBD32.EXE关联
procedure
begin
memo1.lines.add('开始');
if
memo1.lines.add('成功')
else
memo1.lines.add('失败')
end;
----
当你的应用程序是一个基于BDE
HKEY_LOCAL_MACHINE\Software\Borland\Database
具体的例子如下。
同样,在Uses
然后,写下面代码。
{检测系统中是否安装了BDE
function
var
registerTemp
begin
registerTemp
//建立一个Registry实例
with
begin
RootKey:=HKEY_LOCAL_MACHINE;
//设置根键值为HKEY_LOCAL_MACHINE
//查询Software\Borland\Database
result
//善后处理
CloseKey;
Free;
end;
end;
{调用IsBDEInstalled,检测系统中是否安装了BDE
procedure
begin
memo1.lines.add('开始');
if
memo1.lines.add('已安装了BDE')
else
memo1.lines.add('未安装BDE')
end;
----
当你的WIN95/98/NT
桌面上的一个快捷方式,对应Windows
我们的任务,主要是利用TRegistry
同样,在Uses
然后,写下面代码。
{为程序strExeFileName在桌面建立快捷方式,运行参数为strParameters
function
var
registerTemp
strDesktopDirectory
shelllinkTemp
persistfileTemp
begin
registerTemp
//建立一个Registry实例
with
begin
RootKey:=HKEY_CURRENT_USER;
//设置根键值为HKEY_CURRENT_USER
//找到Software\MicroSoft\Windows\CurrentVersion\Explorer\Shell
if
//写入自己程序的信息
begin
result
exit;
end;
//读取项目Desktop的值,即Desktop的实际路径
strDesktopDirectory
//善后处理
CloseKey;
Free;
end;
//设置快捷方式的参数
shelllinkTemp
with
begin
SetPath(
//设置程序文件全名
SetArguments(
//设置程序的命令行参数
//设置程序的工作目录
SetWorkingDirectory(
end;
//构造快捷方式的文件名(.LNK)
strDesktopDirectory
strDesktopDirectory
//保存快捷方式的文件
persistfileTemp
if
result
else
end;
{调用CreateShortcutOnDesktop,为Delphi在桌面上建立快捷方式
procedure
begin
memo1.lines.add('开始');
if
memo1.lines.add('成功')
else
memo1.lines.add('失败')
end;