用CB控制Windows注册表
2008-02-23 05:37:03来源:互联网 阅读 ()
用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 强大的类库,我们能够很轻松地完成这个工作。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: 在系统菜单里添加菜单项和相应事件
下一篇: 在CB程式中控制Windows关机
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash