Delphi中读写注册表

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。
 
三、Delphi提供了TRegistry类,它直接继承自TObject类,主要属性有:RootKey等,主要方法有:Create,CreateKey(Key),
OpenKey(Key,CanCreate),WriteString(Name,Value),ReadString(Name),CloseKey,Free等,下面对它们进行简单介绍。
1、RootKey属性
指定当前操作的注册表主键,共有HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS、HKEY_CURRENT_CONFIG五种取值,默认值为HKEY_CURRENT_USER。
2、CreateKey方法
函数声明为function CreateKey(const Key: String):Boolean;,用于在注册表中新建项,项的名称为参数Key的值。
3、OpenKey方法
函 数声明为function OpenKey(const Key: String; CanCreate: Boolean):Boolean;,其中参数Key指定要打开的注册表的项,参数CanCreate指明当要打开的项不存在时是否创建,默认值为 False;函数返回值为布尔类型,如果打开成功返回True,否则返回False。
4、WriteString方法
过程声明为procedure WriteString(const Name, Value: String);,其中参数Name指明要写入的注册表的字符串的名称,参数Value为要写入的字符串的值。如果该字符串不存在则写入,否则覆盖原来的取值。
5、ReadString方法
函数声明为function ReadString(const Name: String):String;,其中参数Name为要读取的字符串的名称,函数返回值为要读取的字符串的值,是字符串类型。如果该字符串在注册表中不存在,返回值为空字符串。
四、键值维护


除了在注册表中读取、存储外,程序可能还需要增加主键、删除主键、主键改名、数据值改名等。


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);
五、实例
1、将自己的程序加入到注册表
var reg:Tregistry; //formCreate Event
begin
reg:=Tregistry.create;
reg.rootkey( 'HKEY_LOCAL_MACHINE ');
reg.openkey( 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run ');
if not keyexists( 'MyApp.exe ') then //if not exist ,add it!
writestring( 'MyApp.exe ');
end;
2、将信息写入注册表
相应代码如下:
var
reg:TRegistry;//声明一个TRegistry类变量

begin
reg:=TRegistry.Create;//创建实例
reg.RootKey:=HKEY_CURRENT_USER;//指定需要操作的注册表的主键
if reg.OpenKey(’\Software\Delphi,true) then//如果打开成功则进行以下操作
begin
reg.WriteString(’内容名称’,'操作注册表’);//将需要保存的信息写入注册表
reg.CloseKey;//关闭注册表
end;
reg.Free;//释放变量所占内存

end;
2、从注册表中读取信息
相应代码如下:
var
reg:TRegistry;//声明一个TRegistry类变量
s:String;//声明一个字符串变量用来存放要读取的信息

begin
reg:=TRegistry.Create;//创建实例
reg.RootKey:=HKEY_CURRENT_USER;//指定需要操作的注册表的主键
if reg.OpenKey(’\Software\Delphi’,true) then//如果打开成功则进行以下操作
begin
s:=reg.ReadString(’内容名称’);//从注册表中读取对应字符串的值
//如果该字符串不存在则返回值为空字符串
reg.CloseKey;//关闭注册表
end;
reg.Free;//释放变量所占内存

end;
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
注册表是windows系统的一个庞大数据库,它存储着系统硬件、软件及用户信息。适当修改注册表的参数值,可以提高系统的性能。注册表的修改通常有两种途径:其一是利用windows系统提供的"RegEdit"命令进行修改。此种方法虽说直观,但由于注册表的复杂性,对于一般用户来说,此方法并不十分可行。其二就是以编程方式来访问注册表。掌握这种方法,对于程序员来说,是一个重要的基本技术。因为在我们的编程过程,很多地方都需要以程序方式去访问注册表。比如大家熟悉的"超级兔子"、"侠客修改器"等,都是以这种方式来完成对注册表的修改,从而达到保护系统或提高系统性能的目的。   下面以一个实例为基础,讲解在DelPhi如何以编程方式对注册表进行修改。通过本文的学习,你可以获得以下知识:   第一、明确编程访问注册表的基本思想;   第二、明确如何在程序完成对注册表读写操作;   第三、你可以将本文所述的方法移植到VC、VB等语言,举一反三、触类旁通,达到随心所欲修改注册表的目的。   通过实践,你完全有可能编写出象"超级兔子"那样的系统修改器。   一、 实例叙述   1、 程序名称:"隐藏驱动器"(Hide_Drive.exe)   2、 程序界面:程序运行时的界面如图一所示   3、 功能说明:    (1)用户可以选择"A驱"或"B驱",或同时选择"A驱"和"B驱",单击"隐藏"按钮,即可以隐藏"我的电脑"的软盘驱动器。    (2)当程序启动时,可判断系统软盘的当前状态。如果你的系统软盘B已经是处于隐藏状态,程序启动时的界面则如图二所示。   4、 特别说明:此程序就是典型的对注册表进行和写的操作。
Delphi 7是一个功能强大的集成开发环境(IDE),可用于开发Windows平台上的应用程序。在Delphi 7,我们可以使用编程语言Pascal来读写端口。 要在Delphi 7读写端口,我们需要使用相关的函数和过程,例如inportb、outportb和inportw等。这些函数和过程允许我们从指定的端口取数据或将数据写入指定的端口。 要取端口的数据,我们可以使用inportb或inportw函数。这些函数接收一个端口号作为参数,并返回从该端口取的数据。例如,可以使用以下代码从端口0x378(LPT1端口)取一个字节的数据: var data: Byte; begin data := inportb($378); // 在此处处理取到的数据 end; 要将数据写入端口,我们可以使用outportb或outportw函数。这些函数接收一个端口号和要写入的数据作为参数。例如,可以使用以下代码将一个字节的数据写入端口0x378(LPT1端口): var data: Byte; begin data := $FF; // 要写入的数据 outportb($378, data); end; 需要注意的是,读写端口可能需要管理员权限或特定权限,具体取决于操作系统和端口的使用情况。因此,在进行端口访问之前,请确保按照操作系统的要求设置正确的权限。 总之,在Delphi 7读写端口可以通过使用相关的函数和过程来实现。我们可以使用inportb、outportb、inportw和outportw等函数,根据需要取从特定端口上的数据或将数据写入该端口上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值