用CB控制Windows注册表

2016-02-19 17:59 4 1 收藏

下面是个用CB控制Windows注册表教程,撑握了其技术要点,学起来就简单多了。赶紧跟着图老师小编一起来看看吧!

【 tulaoshi.com - 编程语言 】

    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++强大的类库,我们可以很轻松地完成这个工作。
  

来源:https://www.tulaoshi.com/n/20160219/1616534.html

延伸阅读
标签: windows 操作系统
每次进入Windows XP桌面前,总会出现一个用户登录的画面,要求输入用户名和密码。这样做的好处是在多人使用一部电脑的环境中安全性有保障。不过,如果电脑只是你一个人使用,每次都必须输入密码,实在是令人讨厌。要取消这个登录步骤,可以通过修改注册表文件中的Winlogon项目来实现。但在修改之前有必要提醒大家,这样做的后果是你的密码...
本加密方法分三部分: 1. 根据对注册表的搜索结果判定设置对话框的内容。 2. 若初次使用,则设新密码;若是已经设置密码,则进行验证。 3. 一个密码变换小程序(比原来的复杂得多)。当然,如果需要修改密码的功能,只要将设置密码部分改动一下即可。 一、程序启动时,通过搜索注册表,判断是否已有密码...
标签: 电脑入门
    Windows XP的注册表每次打开时都会定位到上一次打开的分支,这样可以很方便的查看到上次修改的键值,微软当初提供这样的服务另一方面也是为了方便用户使用。但并不是每次都打开同一个键值,在每多时候我们还是习惯于Windows 98那样每次打开都在根目录中。通过修改注册表可以达到这样的效果。打开HKEY_CURRENT_USER\Softwar...
标签: 电脑入门
注册表虽然是通过各个根键和子键来分类管理各种信息,但具体数据信息还是依靠键值项和键值来实现。在注册表中绝大多数分支或子项中还包含了一个或若干个值项,每个值项又对应于一定数据类型的一组数据,这就是键值项和键值,打开注册表编辑器后,选择一个分支或子项,在注册表编辑器的右侧窗口中显示的就是键值项和键值(如图1)。 图1 细心...
windows7系统打不开注册表   1.按快捷键win+r,打开运行对话框。如图一 2.输入gepedit.msc,然后点击确定,打开组策略管理。如图二 3.在面板中找到用户配置下的管理模板,双击打开。在界面的右侧找到系统,双击打开。如图三 4.在系统中找到组织访问注册表编辑工具,双击打开。如图四 5.弹出的编辑器...

经验教程

23

收藏

89
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部