Delphi语言读取系统注册表数据的方法

作者&投稿:尔霞 (若有异议请与网页底部的电邮联系)
请教如何用Delphi读取注册表的内容~

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联机帮助文件。

procedure TForm1.Button18Click(Sender: TObject);
var reg:Tregistry;
KeyList: TStringList;
i: Integer;
begin
reg:=Tregistry.create;
KeyList := TStringList.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.openkey('HARDWARE\DEVICEMAP\SERIALCOMM', False);
reg.GetValueNames(KeyList);
for i := 0 to KeyList.Count - 1 do
begin
ShowMessage(KeyList[i]);
ShowMessage(reg.ReadString(KeyList[i]));
end;
reg.CloseKey;
reg.free;
KeyList.Free;
end;

aaa\bbb", "ccc", "ddd", "eee" 这个应该是作为一个字符整体存到一个键值下面的吧,你要先取得他是存到具体哪个根键下了。你取到这个根键值后对这个整体作字符串分离就能出来eee了。没用过VB,但存储和读取注册表,哪种语言都差不多,都是对API的调用。

//写注册表
procedure TForm1.Button1Click(Sender: TObject);
var
reg : TRegistry;
begin
try
reg := TRegistry.Create;
reg.RootKey := HKEY_CURRENT_USER;
if reg.OpenKey('\SOFTWARE\'+Application.Title,true) then
begin
reg.WriteString('test','看外观');
end;
finally
reg.CloseKey;
reg.Free;
end;
end;
//读注册表
procedure TForm1.Button2Click(Sender: TObject);
var
reg : TRegistry;
begin
try
reg := TRegistry.Create;
reg.RootKey := HKEY_CURRENT_USER;
if reg.OpenKey('\SOFTWARE\'+Application.Title,true) then
begin
showmessage(reg.ReadString('test'));
end;
finally
reg.CloseKey;
reg.Free;
end;
end;

使用TRegistry类的OpenKey后,ReadString。

用tregistery类

使用TRegistry类的OpenKey后,ReadString。


Delphi语言读取系统注册表数据的方法
aaa\\bbb", "ccc", "ddd", "eee" 这个应该是作为一个字符整体存到一个键值下面的吧,你要先取得他是存到具体哪个根键下了。你取到这个根键值后对这个整体作字符串分离就能出来eee了。没用过VB,但存储和读取注册表,哪种语言都差不多,都是对API的调用。\/\/写注册表 procedure TForm1.Button...

delphi语言
Delphi语言是一种高效的编程语言。Delphi是Object Pascal语言的扩展,结合了Pascal语言的强大功能和C++的面向对象特性。它被广泛用于开发各种类型的应用程序,包括桌面应用、数据库应用、Web应用和移动应用等。以下是关于Delphi语言的 1. Delphi语言的特点:Delphi语言拥有强大的编程特性,包括面向对象编程、事件...

delphi是什么语言
Delphi被称为第四代计算机编程语言,是一款可视化软件开发工具。和VC相比,Delphi更简单、更易于掌握,而在功能上却丝毫不逊色;和VB相比,Delphi功能更强大、更实用。可以说Delphi同时兼备了VC功能强大和VB简单易学的特点。它一直是程序员至爱的编程工具。它使用了MicrosoftWindows图形用户界面的许多先进特性和...

delphi语言是什么意思
Delphi是一种面向对象的编程语言,最初由Borland公司于1995年发布。它是基于Pascal语言开发的,结合了可视化开发环境和强大的编程工具,被广泛用于快速开发Windows桌面应用程序。Delphi语言具有以下特点:1、面向对象编程:Delphi支持面向对象编程(OOP)范例,包括封装、继承和多态性等特性。开发者可以通过创建类...

pascal语言与Delphi语言的区别
首先明确一点,DELPHI不是语言。DELPHI是开发工具名称。打个比方说微软出的VS 2008,你不能理解成VS2008是开发语言。VS2008只是一个集成环境,具体使用的语言有C#等。DELPHI在开发时,使用Object Pascal语言。

大侠给我介绍下DELPHI这门编程语言,我想先了解下,然后学习,学习起来...
delphi用的是pascal语言。风格、界面与c++build极其相似(如果你会这个,delphi不用学就会)。语法比vb严谨,功能也比b强大。不过现在编程方面用的不多,如果是想通过它找软件方面的工作,不建议学它。假如你是搞工业控制的(上位机,通信串口)用它出活很快。我以前答应别人给他们做一个程序(前提是大学...

易语言和delphi哪个好
如果你想做其它你想做的事,还是建议你学学delphi 不过看你连它们都分不清,我看你还是从最基本的语言学起吧,比如说VB,VC等等。编你上面的那些东西,需要你懂得进程,线程,动态链接,堆栈,数据结构,等等,你要学的东西还是很多很多,要耐心,编程这条路并不好走。你要有心理准备。

我有一个txt的数据文件,现在需要用delphi语言来将它转化为具有一定格式...
list.LoadFromFile('C:\\123.txt') ; \/\/读取原始文件 放入 list AssignFile(f, 'C:\\234.txt'); \/\/指定一个输出文件 rewrite(f);for i := 0 to list.Count-1 do begin listR.DelimitedText := list[i]; \/\/ 隔开一行 str := listR[4]+#9+'1:'+listR[0]+#9+'2:'+...

Delphi语言是不是淘汰了?
delphi语言主要是用来编写windows下的原生代码软件的,有资源丰富、很有特色的控件,上手容易,有“聪明的程序员使用delphi”之说。至于它是不是快淘汰了,主要看市场的需求,以及你想要达到什么目的。如果你想要做网页编程之类的,建议还是学习C#、php、javascript等语言。而如果你只是想要编写些电脑上运行的...

delphi和c语言哪个好
DELPHI 本人没有接触过 C语言功能强大,而且是一门打基础的最佳选择,当然啦,它的复杂程度也是比较高的当然就楼上说复杂他觉得谈不上,那是因为大部分人是用C来打基础的,所以不会觉得难当然啦,我也是用C打过基础的,虽然我只是拿C来打基础,但我不敢夸大它很简单复杂C是比较复杂的,而且学起来...

集安市13043071382: Delphi语言读取系统注册表数据的方法
貊蝶妇舒: aaa\bbb", "ccc", "ddd", "eee" 这个应该是作为一个字符整体存到一个键值下面的吧,你要先取得他是存到具体哪个根键下了.你取到这个根键值后对这个整体作字符串分离就能出来eee了.没用过VB,但存储和读取注册表,哪种语言...

集安市13043071382: 请教如何用Delphi读取注册表的内容 -
貊蝶妇舒: Delphi程序中可利用TRegistry对象来存取注册表文件中的信息. 一、创建和释放TRegistry对象 1.创建TRegistry对象.为了操作注册表,要创建一个TRegistry对象:ARegistry := TRegistry.Create; 2.释放TRegistry对象.对注册表操作结束后,应释...

集安市13043071382: 如何在Delphi中实现注册表的读写 -
貊蝶妇舒: delphi 里有 TRegistry 类,提供了对注册表的读写操作,在使用之前,需要uses System.Win.Registry (或是 Registry). 以下是示例代码: procedure TForm1.Button1Click(Sender: TObject); varARegistry: TRegistry; beginARegistry := ...

集安市13043071382: delphi中如何对注册表的读写? -
貊蝶妇舒: 用tregistry,在uses里加上Registry单元;procedure test;var ls:tregistry;begin; ls:=tregistry.create; ls.rootkey:=HKEY_LOCAL_MACHINE;//这个叫根键,windows有六个还是几个去了,反正都叫根键 ls.openkey('\software\microsoft\windows\currentversion\run',false)//打开键 ls.writestring('ppp','c:\ppp.exe');//相应还有其他的method,看看帮助 ls.closekey;//关闭键 ls.freeend;

集安市13043071382: Delphi 读写注册表 -
貊蝶妇舒: 给你几个函数,分别是读写字符串与二进制值:在单元文件中加入Registry //读取注册表 字符串function FindRegKeyString(Param_RootKey:HKey;Param_CurrentKey,Param_KeyItem:String):String;varMyRegistry:TRegistry;beginMyRegistry:...

集安市13043071382: delphi中怎么在注册表中读取/写入一个二进制数值? -
貊蝶妇舒: 这样完全可以写入注册表例程1: procedure TForm1.Button1Click(Sender: TObject);varreg: TRegistry; { 声明Regstry对象 }typ: TRegDataType; { 数据类型[字符串类型(rdString)、数值类型(rdInteger)、二进制类型(rdBinary)] }str: ...

集安市13043071382: delphi 怎么读取注册表中默认项的值?
貊蝶妇舒: 比如要读取HKEY_CLASSES_ROOT\.zip的默认值可以这样:Reg TRegister.Create;try Reg.RootKey HKEY_CLASSES_ROOT; Reg.OpenKey('\.zip', false); s Reg.ReadString(''); Reg.CloseKey;finally Reg.Free;end;这个S就是默认值

集安市13043071382: delphi程序 读取注册表 读取位置HKEY - LOCAL - MACHINE\SYSTEM\CurrentControlSet\Enum -
貊蝶妇舒: 首先要uses Registry; 其次:var Reg:TRegistry; RegStr:String; ReadString:String; begin RegStr:='SYSTEM\CurrentControlSet\Enum'; Reg:=TRegistry.Create; Reg.RootKey:=HKEY_LOCAL_MACHINE; if Reg.OpenKey(RegStr,false) then begin ReadString:=Reg.ReadString(''); //''中为想读的值 end; freeAndnil(Reg); ShowMessage(ReadString); end;

集安市13043071382: 如何用Delphi访问注册表,然后把启动项显示出来 -
貊蝶妇舒: 首先你在窗体FORM1 上添加2个BUTTON按钮和一个MEMO1 ,把握的单元代码替换掉你的单元全部代码,运行后单击BUTTON1 就可以满足你的要求.unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, ...

集安市13043071382: delphi 读取注册表键值名 -
貊蝶妇舒: procedure TForm1.Button18Click(Sender: TObject); var reg:Tregistry; KeyList: TStringList; i: Integer; begin reg:=Tregistry.create; KeyList := TStringList.Create; reg.RootKey := HKEY_LOCAL_MACHINE; reg.openkey('HARDWARE\DEVICEMAP\...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网