当前位置: 首页 > 学习 > 电脑学习 > 程序设计 > C++ > 系统控制 > 正文

用CB控制Windows注册表

http://www.zk168.com.cn  招考学习网 2006-4-11 6:10:57
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
    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++强大的类库,我们可以很轻松地完成这个工作。

-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
最新入库:
 
·实质、过程及意义——阿多尔诺“否定的辩证法”探微
·从Ontology的译名之争看哲学术语的翻译原则
·论马克思主义哲学经典的解释——解释学方法及其在马克
·中国哲学当前的核心与周边问题
·和合学与21世纪文化价值和科技
·中国文化的和合精神与21世纪
·宗教之间理当相互宽容
·上半个世纪的自由主义
·殷周至春秋时期神人关系之演进
·大学之道:构建以“三纲八目”为核心的道德修养体系
相关内容:
 
·21世纪以煤和天然气为原料的C1化学
·BOG压缩机在液化石油气基地的应用
·OECD主要国家软件业发展概况
·英美CPA管理模式及其启示
·沙角C电厂事故顺序记录的通道组态分析及整改
·LFCB-102型微波分相差动保护的应用
·沙角C电厂厂用电结线分析
·基于PB6和ORACLE8开发“劳动信息管理系统”
·利用TDC组件实现对WEB页面的交互操作
·TCP/IP在网络中的高效配置
网友点评:
 
会员名称:
密码:匿名 ·注册·忘记密码?
评论内容:
(最多300个字符)
  查看评论
友情提醒:
 1.库中的资料大都来自互联网、网友上传、各类书籍,在录入的过程中难免会出现错误,恳请网
 友来信指正!
 2.如果网友在本库中未能找到所需要的材料,请登陆到我们的论坛《招考学习网》版块!
 3.考友想加入招考学习网的编辑部,请发信到XueXiWang#Gmail.com(#改为@)附带个人简历
 4.如需转载请注明出处及作者,谢谢合作!
 5.如果您有更好的建议或意见请EMAIL:XueXiWang#Gmail.com (#改为@)
 6.凡标题中有注有“[NO]”字样均不含答案且答案整理中.
 7.如本库中转载文章涉及版权等问题,请相关网站或作者在两周内发邮件通知(EMAIL:  XueXiWang#Gmail.com (#改为@))我们,我们接到通知后立即删除该文章及链接!
你问我答 更多>>