用CB控制Windows注册表

Windows注册表中包含了系统配置、机器硬件配置、Win32应用程序和用户的其他配置信息。注册表根据系统信息分为六个根键(RootKey),其中每个根键各有一个由子键和键值组成的树状结构,每个子键代表一个特定的配置项目。

用C++Builer控制注册表的关键在于了解TRegistry 类。在C++Builder的VCL类库中,提供了TRegistry类,通过在应用程序中生成这个类的实例,我们可以实现对注册表的控制。在TRegistry类中,重点应该掌握如下问题:

1.TRegistry类的生成

我们不能用直接声明的方法生成TRegistry的实例,这与VC++中用HKEY直接生成实例的方法不同。必须采用new关键字生成TRegistry 类的实例,然后将指针传递给声名的变量。具体操作如下:

TRegistry * curReg=new TRegistry;//curReg是 TRegistry类型的指针名

采用这个方式声明后,curReg的RootKey属性指向 HKEY_CURRENT_USER根键,即默认操作是针对HKEY_CURRENT_USER进行的。

2.如何打开和关闭主键

TRegistry类提供了两个成员函数打开一个主键: OpenKey()和OpenKeyReadOnly()函数。其中,OpenKey函数同时提供了创建主键的功能。

OpenKey()有两个参数,KeyName和canCreate。canCreate 是一个bool型参数,当它设置成true时,如果当前根键下不存在AnsiString类的变量 KeyName所指出的主键,则创建这个主键;否则进入KeyName指出的主键。如果canCreate 设置成false,而当前根键下没有KeyName指出的主键,则函数返回false。

OpenKeyReadOnly()函数的功能是以只读方式打开一个主键,如果参数值是NULL,则指向RootKey指明的键。

KeyName参数有两种表示方法:绝对路径表示和相对路径表示。采用绝对路径表示时,串值必须以“\\"开头;采用相对路径则表示KeyName指明的主键是相对于当前主键而言的。

在注册表使用完毕后,应当及时调用CloseKey()成员函数关闭注册表,并调用delete方法将用new申请的内存空间释放。

3.关于当前主键下子键值的获取

我们可以用GetKeyNames()成员函数得到当前主键下所有子键的名称,用GetKeyInfo得到更加详细的信息。

必须指出,虽然GetKeyNames()的说明成void __fastcall GetKeyNames(Classes::TStrings * Strings),也就是说,它的参数类型是TString,但是我们并不能首先声明一个TString类的实例,然后将它作为参数用于GetKeyNames()。这主要是由于TStrings类含有抽象成分。我们的解决方法是采用TStrings类的派生类TStringList来代替TStrings声明一个实例,并作为参数用于GetKeyNames()函数。

在获得子键的名称后,我们就可以利用有关函数进一步确定详细信息。例如,我们可以用GetValueNames()结合Read()和 Write()获得主键的值的详细信息。例如:我们要读“\Software\Sybase”中的 “Location”串值的信息,可以执行如下操作:

curReg->OpenKey(“\\Software\\Sybase",true);

AnsiString ValueInfo=CurReg->ReadString(“Location");

这时,ValueInfo就获得了Location的值。

4.关于属性的说明

TRegistry类的一个主要属性是LazyWrite。这个属性的作用是决定是否在执行写操作之后立即将所做的改动反映到实际的注册表中。这个属性的值在注册表对象构造时初始化为true,即不立即将所做的改动反映到实际的注册表中,而是在执行CloseKey()函数之后重写注册表,这样可以提高系统性能。但是,如果我们需要将修改立即反映到注册表(这在许多场合是必要的),则应当首先将LazyWrite属性设置为false,然后执行修改操作。

另一个值得一提的属性是RootKey,这个属性规定了当前操作的对象是哪一个根键,默认为HKEY_CURRENT_USER。如果需要对其他根键进行操作,直接将目标根键的值赋给RootKey属性即可。

下面请看我们的程序中的一个实际片段,这个例子的功能是将“\Software\MyInfo”主键下的所有子键名称显示在ComboBox1中:

  #include
   …………
   TRegistry *curReg=new TRegistry;
   curReg->OpenKey(“Software\\MyInfo",true);
   KeyNames=new TStringList();//注意TstirngList类的声明方法!
   curReg->GetKeyNames(KeyNames); for(int i=0;iCount;i++) ComboBox1->Items->Add(KeyNames->
   Strings[i]);
   curReg->CloseKey();
   delete KeyNames;
   …………

由此看来,在C++Builder环境下控制注册表的问题并不复杂,利用C++强大的类库,我们可以很轻松地完成这个工作。

时间: 2024-10-21 15:48:13

用CB控制Windows注册表的相关文章

保护Windows注册表

保护注册表是很重要的,有很多不同的工具可以实现这一目的.当没有安全设置时,用户可能的错误会更多.幸运的是,他们可以有几中方法来保护Windows注册表,在注册表失败时他们可以用额外的拷贝来恢复注册表.下面就是其中的一些方法:   1.使用windows备份软件   注:Win95和Win98备份程序有部分区别,在这里只讲Win98的备份程序.   Win98中包括一个备份程序.当安装Win98时如果你选择"自定义安装",或者你可以在控制面板中的添加/删除程序里安装它.当你安装了这个备份

快速扫除windows注册表垃圾的方案

注册表在windows系统中是一个重要的数据库,存储着系统和应用程序的设置信息,在安装软件时都会加载很多信息表,但是卸载的时候无法自动全部删除,会遗留下很多注册表冗余垃圾,这时候我们就要对它进行垃圾的扫除,减轻注册表的负担. 快速扫除windows注册表垃圾的方案 1.使用第三方安全软件清理注册表垃圾 利用超级兔子.优化大师.安全卫士一系列的第三方软件清理,下面小编就以金山卫士为例,打开主界面,找到垃圾清理-清理注册表,开始扫描清理即可,金山卫士会自动把注册表备份,就不用我们在单独备份了,要是出

快速清理windows注册表垃圾的方法

  大家在安装系统的软件的时候,总会伴随着很多的信息表和应用程序的设置信息.但是有的时候,我们不需要用到一些软件就把它卸载了,相应的注册表却卸载不了.不能完全被删除.那么系统上就会留下好多的注册表冗余垃圾,我们就应该对这些垃圾进行清楚大扫除,减轻注册表的负担.系统的空间. 快速扫除windows注册表垃圾的方案 1.使用第三方安全软件清理注册表垃圾 利用超级兔子.优化大师.安全卫士一系列的第三方软件清理,下面小编就以金山卫士为例,打开主界面,找到垃圾清理-清理注册表,开始扫描清理即可,金山卫士会

详解Windows注册表分析取证

大多数都知道windows系统中有个叫注册表的东西,但却很少有人会去深入的了解它的作用以及如何对它进行操作.然而对于计算机取证人员来说注册表无疑是块巨大的宝藏.通过注册表取证人员能分析出系统发生了什么,发生的时间以及如何发生的等.在本文中我将为大家详细介绍Windows注册表的工作原理,以及如何对收集用户留下的各类指纹信息. 什么是注册表? 注册表是用于存储Windows系统用户,硬件和软件的存储配置信息的数据库.虽然注册表是为了配置系统而设计的,但它可以跟踪用户的活动,连接到系统的设备,什么时

Illustrator提醒已检测到Windows注册表存在问题解决教程

给各位Illustrator软件的使用者们来详细的解析分享一下提醒已检测到Windows注册表存在问题的解决教程. 教程分享: 1.安装好 Adobe illustrator后,打开居然弹出如下窗口   2.点击"是",软件启动正常,可以正常使用 3.可每次打开它都会出现那个窗口,不怎么影响使用,但很不爽吧 4.出现这种问题的原因,,小编初步推测是因为安装了不同版本的Ai 或者ps,id等软件,或安装了多个版本的ai等,使的ai的部分组件不能再系统注册.关于好多网友说的软件冲突,卸载部

Windows注册表编辑器打开方法及打不开解决办法

  Windows的注册表(Registry)实质上是一个庞大的数据库,它存储这下面这些内容:软.硬件的有关配置和状态信息,应用程序和资源管理器外壳的初始条件.首选项和卸载数据;计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联, 硬件的描述.状态和属性;计算机性能纪录和底层的系统状态信息,以及各类其他数据. 方法一 直接打开注册表 在XP或win7系统中,点击屏幕左下角的"开始"按钮,再点击"运行..."按钮: 或者直接按Windows键+R,打开&qu

Windows注册表常用技巧十例_注册表

1.防止匿名用户登录 虽然Windows可以为每个用户定制各自的使用界面并指定口令,但任何人都能通过点击登录窗口中的"取消"或按ESC键进入系统,即所谓匿名登录.下述方法可以防止匿名用户登录. 在HKEY_LOCAL_MACHINE\NetWork\Logon下新建DWORD类型"MustBeValidated",其值为1.(附:如果自己都进不去了,可以以安全模式进入,然后将其值改为0.)注意:在对等网络下该方法不起作用. 2.重排输入法 您可以将所有输入法按自已的

VBScript实现对Windows注册表的修改

vbscript|window|注册表 大名鼎鼎的WSH听说过吗? 它就是Windows Script Host的缩写形式,WSH是Windows平台的脚本指令,它的功能十分强大,并且它还是利用语法结构简单.易学易用且功能强大的JScript和VBScript脚本语言,来实现其卓越的功能的,除了本文介绍的修改注册表之外,它还可以访问Excel文件,也能与网络沟通,当然它最大的优势莫过于它能与操作系统沟通,而修改注册表只是它与操作系统沟通的冰山一角.正是它有如此诸多的优点与实用性,正倍受很多Win

用VBScript实现对Windows注册表的修改

vbscript|window|注册表 大名鼎鼎的WSH听说过吗? 它就是Windows Script Host的缩写形式,WSH是Windows平台的脚本指令,它的功能十分强大,并且它还是利用语法结构简单.易学易用且功能强大的JScript和VBScript脚本语言,来实现其卓越的功能的,除了本文介绍的修改注册表之外,它还可以访问Excel文件,也能与网络沟通,当然它最大的优势莫过于它能与操作系统沟通,而修改注册表只是它与操作系统沟通的冰山一角.正是它有如此诸多的优点与实用性,正倍受很多Win