<b>用CB掌握Windows注册表</b>[VC/C++编程]
本文“<b>用CB掌握Windows注册表</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
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++强盛的类库,我们可以很轻松地完成这个工作.
以上是“<b>用CB掌握Windows注册表</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |