用CB控制Windows注册表

01扬帆远航

01扬帆远航

2016-02-19 17:59

下面是个用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()获得主键的值的具体信息。例如:我们要读“SoftwareSybase”中的 “Location”串值的信息,可以执行如下操作:
      curReg-OpenKey(“SoftwareSybase",true);
      AnsiString ValueInfo=CurReg-ReadString(“Location");
      这时,ValueInfo就获得了Location的值。
      4.关于属性的说明
      TRegistry类的一个主要属性是LazyWrite。这个属性的作用是决定是否在执行写操作之后立即将所做的改动反映到实际的注册表中。这个属性的值在注册表对象构造时初始化为true,即不立即将所做的改动反映到实际的注册表中,而是在执行CloseKey()函数之后重写注册表,这样可以提高系统性能。但是,假如我们需要将修改立即反映到注册表(这在许多场合是必要的),则应当首先将LazyWrite属性设置为false,然后执行修改操作。
      另一个值得一提的属性是RootKey,这个属性规定了当前操作的对象是哪一个根键,默认为HKEY_CURRENT_USER。假如需要对其他根键进行操作,直接将目标根键的值赋给RootKey属性即可。
      下面请看我们的程序中的一个实际片段,这个例子的功能是将“SoftwareMyInfo”主键下的所有子键名称显示在ComboBox1中:
      #include
      …………
      TRegistry *curReg=new TRegistry;
      curReg-OpenKey(“SoftwareMyInfo",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++强大的类库,我们可以很轻松地完成这个工作。
  
展开更多 50%)
分享

猜你喜欢

用CB控制Windows注册表

编程语言 网络编程
用CB控制Windows注册表

用注册表全面优化Windows

windows 操作系统
用注册表全面优化Windows

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

用Asp修改注册表

ASP
用Asp修改注册表

用PHP读注册表

Web开发
用PHP读注册表

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

使用Java操作Windows注册表

编程语言 网络编程
使用Java操作Windows注册表

Windows10如何备份注册表

注册表 windows10 windows
Windows10如何备份注册表

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

写个偷全国公交数据库的程序

写个偷全国公交数据库的程序

C++ Builder 预定义动作类

C++ Builder 预定义动作类
下拉加载更多内容 ↓