当前位置:文档之家› [DELPHI]关于处理注册表

[DELPHI]关于处理注册表

Delphi的TRegistry注册表类方法详解

●GetDataInfo方法

Function GetDataInfo(const ValueName:String;Var Value:TRegDataInfo):Boolean;

TregDataType=(rdunknown,rdstring,rdexpandstring,rdeXPandstring,rdinterger,rdbinary);

TregDataInfo=record

Regdata:TRegDataType;数据类型

dataSize:integer;数据大小

end

valuename:和当前键关联的数据值名称

value:返回数据的信息,如为rdstring和rdeXPandstring类型,则数据大小包括字符串未尾的空结束字符。

如果成功返回True,失败返回False,并且Value的值为zeros

rdeXPandstring:是一个包含环境变量的字符串;如“%PATH%”。

●CreateKey方法

Function CreateKey(const Key:string):Boolena;

新建一个名为Key的键,Key可以为绝对的或相对的名字,绝对名用反斜杠“\”开头,相对名是新建一个当前键的子键。新建没有值。

成功返回True,否则返回False,如果该键已存在将不产生效果。

●DeleteKey方法

Function DeleteKey(const Key:string):Boolean;

删除一个键及相关联的数据,在win95中子键也将被删除,NT中子键必须一个个删除。

●DeleteValue方法

Function DeleteValue (const Name:string):Boolean;

删除当前键中指定的一个数据值name。

●GetDataSize方法

Function GetDataSize(const ValueName:string):integer;

返回当前键中一个指定数值ValueName数据的大小。

●GetDataType方法

Function GetDataType(const Valuename;string):TRegDataType;

返回当前键中一个指定数值Valuename数据的类型。

●GetKeyInfo方法

Function GetKeyInfo(var value:TRegkeyinfo):Boolean;

返回当前键的信息,在于value中。

TRegkeyinfo=record

maxsubkeylen:integer;子键名的最长值(字节)

numvalues:integer;键值的数量

maxvaluelen;最长的键值名的长度

Filetime:TFileTime;最后一次更改的时间

end;

●Getkeynames方法


Procedure Getkeynames(strings:Tsrtings);

返回当前键所有子键的名子列表串。

●Getvaluenames

Procedure Getvaluenames(strings:Tstrings);

返回当前键所有键值名的列表串。

●Hassubkeys方法

Function hassubKeys:Boolean;

判断当前键是否有子键,有返回True,否则返回False。

●keyExists方法

Function KeyExists(const Key:string):Boolean;

判断指定的键是否存在。

●LoadKey方法

Function LoadKey(const Key,fileNmae:string):Boolean;

在根键下新建

从一个文件中加载注册信息到子键中,文件注册信息中包含数据值名、子键和数据。

LoadKey使创建一个键单一化,子键,键值和数据在一人操作中完成,所有这些称为一组,和单独地创建它们不同应用程序可以在一个文件中读取一组数据,这在用户运行中重新设置有特别的用处。

Key为要创建子键的名子

FileName:为文件的位置,所指定的文件必须

为以前用SaveKey函数或RegSaveKey API函数所建立的,文件名不能包括扩展名。

●OpenKey方法

Function OpenKey(const Key:string;cancreate:Boolean):Boolean;

使用该函数可以指定一个键作为当前键,如果键为nil,则当前键 将设置为根键。

Cancreate决定是否在指定键不存在时创建该键,该函数创建的键的键值将不确定。

如果成功地打开或创建,该函数返回True。

●OpenKeyReadOnly方法

function OpenKeyReadOnly(const Key: String): Boolean;

以只读的方式打开Key值指定的键。

●CloseKey方法

procedure CloseKey;

当不再使用一个键时应用该方法关闭该键。

●MoveKey方法

procedure MoveKey(const OldName, NewName: String; Delete: Boolean);

该方法移动或复制一个键到一个新的位置,并把键的名子改为NewName。

在Win95/98下该的子键和数据将被一起移动或复制到新的位















[DELPHI]关于处理注册表
uses Registry;
var reg:Tregistry;
reg:=Tregistry.create;
reg.rootkey:='HKey_Current_User';
reg.openkey('Control Panel\Desktop',false);
reg.WriteString('Title Wallpaper','0');
reg.writeString('Wallpaper',filelistbox1.filename);
reg.closereg;
reg.free;





◇ 在Delphi程序中操作注册表
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。
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下,有三个字符串值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
if OpenKey( ′Software′,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′,True) then
WriteString(′delphi′,′C:Files.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下的数值名称的方法来进行。
6.判断数值名称存在、数值名称改名。
valueExists用于判断数值名称是否存在:
function valueExists(const Name: string): Boolean;
返回值为True表示数值名称存在。
Renamevalue用于数值名称改名:
procedure Renamevalue(const OldName, NewName: string);
以上是注册表常用操作所对应的TRegistry的方法和属性,其它方法和属性请参见Delphi联机帮助文件。
◇ delphi的tregistry注册表类方法详解
●getdatainfo方法
function getdatainfo(const valuename:string;var value:tregdatainfo):boolean;
tregdatatype=(rdunknown,rdstring,rdexpandstring,rdexpandstring,rdinterger,rdbinary);
tregdatainfo=record
regdata:tregdatatype;数据类型
datasize:integer;数据大小
end
valuename:和当前键关联的数据值名称

value:返回数据的信息,如为rdstring和rdexpandstring类型,则数据大小包括字符串未尾的空结束字符。如果成功返回true,失败返回false,并且value的值为zeros

rdexpandstring:是一个包含环境变量的字符串;如“%path%”。

●createkey方法
function createkey(const key:string):boolena;
新建一个名为key的键,key可以为绝对的或相对的名字,绝对名用反斜杠“\u8221”开头,相对名是新建一个当前键的子键。新建没有值。成功返回true,否则返回false,如果该键已存在将不产生效

果。

●deletekey方法
function deletekey(const key:string):boolean;
删除一个键及相关联的数据,在win95中子键也将被删除,nt中子键必须一个个删除。

●deletevalue方法
function deletevalue (const name:string):boolean;
删除当前键中指定的一个数据值name。

●getdatasize方法
function getdatasize(const valuename:string):integer;
返回当前键中一个指定数值valuename数据的大小。
●getdatatype方法
function getdatatype(const valuename;string):tregdatatype;
返回当前键中一个指定数值valuename数据的类型。

●getkeyinfo方法
function getkeyinfo(var value:tregkeyinfo):boolean;
返回当前键的信息,在于value中。
tregkeyinfo=record
maxsubkeylen:integer;子键名的最长值(字节)
numvalues:integer;键值的数量
maxvaluelen;最长的键值名的长度
filetime:tfiletime;最后一次更改的时间
end;

●getkeynames方法
procedure getkeynames(strings:tsrtings);
返回当前键所有子键的名子列表串。

●getvaluenames
procedure getvaluenames(strings:tstrings);
 返回当前键所有键值名的列表串。

●hassubkeys方法
(AdWords)function hassubkeys:boolean;
判断当前键是否有子键,有返回true,否则返回false。

●keyexists方法
function keyexists(const key:string):boolean;
判断指定的键是否存在。

●loadkey方法
function loadkey(const key,filenmae:string):boolean;
 在根键下新建
 从一个文件中加载注册信息到子键中,文件注册信息中包含数据值名、子键和数据。
 loadkey使创建一个键单一化,子键,键值和数据在一人操作中完成,所有这些称为一组,和单独地创建它们不同应用程序可以在一个文件中读取一组数据,这在用户运行中重新设置有特别的用处。
 key为要创建子键的名子
 filename:为文件的位置,所指定的文件必须为以前用savekey函数或regsavekey api函数所建立的,文件名不能包括扩展名。

●openkey方法
function openkey(const key:string;cancreate:boolean):boolean;
使用该函数可以指定一个键作为当前键,如果键为nil,则当前键将设置为根键。
cancreate决定是否在指定键不存在时创建该键,该函数创建的键的键值将不确定。如果成功地打开或创建,该函数返回true。

●openkeyreadonly方法
function openkeyreadonly(const key: string): boolean;
以只读的方式打开key值指定的键。

●closekey方法
procedure closekey;
 当不再使用一个键时应用该方法关闭该键。

●movekey方法
procedure movekey(const oldname, newname: string; delete: boolean);
 该方法移动或复制一个键到一个新的位置,并把键的名子改为newname。
 在win95/98下该的子键和数据将被一起移动或复制到新的位置

,在nt下子键必须用movekey明确的移动或自制。

●读取数据的方法
function readbinarydata(const name: string; var buffer; bufsize: integer):integer;

function readbool(const name: string): boolean;

function readcurrency(const name: string): currency;

function readdate(const name: string): tdatetime;

function readdatetime(const name: string): tdatetime;

function readfloat(const name: string): double;

function readinteger(const name: string): integer;

function readstring(const name: string): string;

function readtime(const name: string): tdatetime;

以上方法从当前主键读取相应数据类型的键值的数据,如果类型不匹配将产生一个异常。

●registryconnect方法
function registryconnect(const uncname: string): boolean;

 与另一台计算机的注册表建立连接,在建立连接前应将rootkey属性设为hkey_users或hkey_local_machine。
 uncname是另一台计算机的名子。格式如:\computername
 假如uncname为nil,将打开本地计算

◇ 应用之一:让自己的程序随WIN95/98/NT的启动而运行
当然,你可以在"启动"程序组中加入程序的快捷方式,但这样做好像不大明智,因为大多数程序在安装时不会这样做,而通过在注册表增加键值,让WIN 95/98/NT在启动时运行自己的程序.如果打开注册表,找到HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run,就会发
现这个秘密了,原来许多自动运行的程序都在这里.你也可以在这里增加一个键,让你的程序也随着WIN95/98/NT的启动而自己运行,成为WINDOWS下的TSR程序.实现方法如下:
首先,在Uses中加上Registry单元。然后,写下面代码.
{ 将程序strExeFileName置为自动启动 }
function StartUpMyProgram( strPrompt,strExeFileName : string ) : boolean;
var
registerTemp : TRegistry;
begin
registerTemp := TRegistry.Create; //建立一个Registry实例
with registerTemp do
begin
RootKey:=HKEY_LOCAL_MACHINE;//设置根键值为 HKEY_LOCAL_MACHINE
//找到Software\Microsoft\Windows\CurrentVersion\Run
if OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',True) then
//写入自己程序的快捷方式信息
begin
WriteString( strPrompt, strExeFileName );
result := true;
end
else result := false;
//善后处理
CloseKey;
Free;
end;
end;
{ 调用StartUpMyProgram,使Delphi随WINDOWS启动而自动运行 }
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.lines.add('开始');
if StartUpMyProgram('delphi','C:\Program Files\borland\delphi3\bin\delphi32.exe') then
memo1.lines.add('成功')
else
memo1.lines.add('失败')
end;


应用之二:实现文件关联


 

 当MS WORD安装在你的系统中时,它会把.DOC文件与自己关联,当你双击一个DOC文件,就会启动MS WORD,打开你指定的DOC文件.你也可以把一个文件类型与一个程序关联起来,其秘密还是在注册表中.如果打开注册表,找到HKEY_CLASSES_ROOT,就会发现这里已经有很多文件类型。你也可以在这里增加一个键,建立自己的文件关联.

建立文件关联,一般应有两个步骤:

(1)根据文件类型的扩展名,指定对应的键名(如doc文件对应的键为doc_auto_file),该键及其子键的值,将定义该类型的文件的类型说明和操作(如打开、编辑)说明。

(2)在指定的键名下,建立子键,指明文件类型说明和操作对应的程序信息
例如,我们可以为.DBF文件建立文件关联,其文件类型说明为"xBase数据表",使其打开(Open)文件的操作对应程序C:\Program Files\Borland\DBD\DBD32.EXE.首先,应在注册表的根键HKEY_CLASSES_ROOT下建立一个键,键名为.DBF,默认值为DBF_Auto_File,表示DBF类型文件的关联操作信息记录在键HKEY_CLASSES_ROOT\DBF_Auto_File下;然后,建立键HKEY_CLASSES_ROOT\DBF_Auto_File,并设其默认值为"xBase数据表",表示文件类型说明;再建立键HKEY_CLASSES_ROOT\DBF_Auto_File\Shell\open\command,设置其默认值为C:\Program Files\Borland\DBD\DBD32.EXE %1(其中"%1"为命令行参数),表示打开操作对应的程序信息。
具体实现如下:
同样,在Uses中加上Registry单元,然后,写下面代码.
{ 将文件类型strFileExtension与程序strExeFileName相关联,strDiscription为文件类型说明 }
function AssignToProgram( strFileExtension,strDiscription,strExeFileName : string ) : boolean;
var
registerTemp : TRegistry;
begin
registerTemp := TRegistry.Create; //建立一个Registry实例
with registerTemp do
begin
RootKey:=HKEY_CLASSES_ROOT;//设置根键值为HKEY_CLASSES_ROOT

相关主题
文本预览
相关文档 最新文档