• C#读取注册表信息


          注册表是视窗系统的一个核心的数据库,在这个数据库中存放中与系统相关的各种参数,这些参数直接控制中系统的启动、硬件的驱动程序安装信息以及在视窗系统 上运行的各种应用程序的注册信息等。这就意味着,如果注册表因为某些原因受到了破坏,轻者是视窗系统启动过程出现异常,重者就有可能导致整个系统的完全瘫 痪。所以正确的认识注册表,及时的备份注册表,对于视窗用户就显得相当重要。
      C#就可以十分方便、简洁的开发出操作注册表的程序。单击"开始 /运行",在"打开"的后面填入"regedit"。就可以看到注册表的数据结构了。"主键"是有层次结构的。主键的下一级主键称为该主键的"子键"。每 一个主键可以对拥有多个子键。右边的这些值就是所谓的键值了。每一个主键或者子键都可以拥有多个键值。注册表是一个庞大的数据库,在其中每一个主键,每一 个键值都赋予了不同的功能。
      C#如何读取注册表中的主键和键值:在.Net FrameWork SDK Beta 2版中,有一个Microsoft.Win32的名称空间,在此名称空间中提供了二个用于注册表操作的类:Registry类、RegistryKey 类。这二个类都是封闭类,不可以继承。这二个类定义了许多关于注册表的方法和属性,通过调用这二个类,在Visual C#中就可以比较轻松的处理关于注册表的各种操作了。

    (1).Registry类:此类主要封装了七个公有的静态域,而这些静态域分别代表这视窗注册表中的七个基本的主键,具体如下所示: Registry.ClassesRoot 对应于

    HKEY_CLASSES_ROOT主键
    Registry.CurrentUser 对应于HKEY_CURRENT_USER主键
    Registry.LocalMachine 对应于 HKEY_LOCAL_MACHINE主键
    Registry.User 对应于 HKEY_USER主键
    Registry.CurrentConfig 对应于HEKY_CURRENT_CONFIG主键
    Registry.DynDa 对应于HKEY_DYN_DATA主键
    Registry.PerformanceData 对应于HKEY_PERFORMANCE_DATA主键

    (2).RegistryKey类:此类中主要封装了对视窗系统注册表的基本操作。在程序设计中,首先通过Registry类找到注册表中的基本主键,然后通过RegistryKey类,来找其下面的子键和处理具体的操作的。
    下面通过一个读取注册表信息例子来具体说明这二个来的用法。
    程序设计和运行的环境:Windows 2000服务器版,.Net FrameWork SDK Beta 2版。
    在运行程序前的一些必要的处理工作。在程序设计时,主要功能是读取已经存在的主键键值,用户可以新建若干个主键和对应的键值。
    程序的主要功能是读取指定主键下面的所有子键和子键拥有的键值,并以列表的形式按层次显示出来。程序设计过程中的重要步骤以及应该注意的一些问题:
    程 序中读取主键、子键和键值所使用到的方法: 程序中为了读取指定主键下面的子键和子键中拥有的键值,主要使用了RegistryKey类中的四个方 法:OpenSubKey,GetSubKeyNames,GetValueNames,GetValue。具体的用法和意思如下: OpenSubKey ( string name )方法主要是打开指定的子键。
    GetSubKeyNames ( )方法是获得主键下面的所有子键的名称,它的返回值是一个字符串数组。
    GetValueNames ( )方法是获得当前子键中的所有的键名称,它的返回值也是一个字符串数组。

    以下从‘读’‘写’‘删除’‘判断’四个事例实现对注册表的简单操作
    1.读取指定名称的注册表的值

    private string GetRegistData(string name)
    {
     string registData;
     RegistryKey hkml = Registry.LocalMachine;
     RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
     RegistryKey aimdir = software.OpenSubKey("XXX",true);
     registData = aimdir.GetValue(name).ToString();
     return registData;
    }

    以上是读取的注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下的XXX目录中名称为name的注册表值;

    2.向注册表中写数据

    private void WTRegedit(string name,string tovalue)
    {
    RegistryKey hklm = Registry.LocalMachine;
    RegistryKey software = hklm.OpenSubKey("SOFTWARE",true);
    RegistryKey aimdir = software.CreateSubKey("XXX");
    aimdir.SetValue(name,tovalue);
    }

    以上是在注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下新建XXX目录并在此目录下创建名称为name值为tovalue的注册表项;

    3.删除注册表中指定的注册表项

    private void DeleteRegist(string name)
    {
    string[] aimnames;
    RegistryKey hkml = Registry.LocalMachine;
    RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
    RegistryKey aimdir = software.OpenSubKey("XXX",true);
    aimnames = aimdir.GetSubKeyNames();
    foreach(string aimKey in aimnames)
    {
    if(aimKey == name)
    aimdir.DeleteSubKeyTree(name);
    }
    }

    以上是在注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下XXX目录中删除名称为name注册表项;

    4.判断指定注册表项是否存在

    private bool IsRegeditExit(string name)
    {
    bool _exit = false;
    string[] subkeyNames;
    RegistryKey hkml = Registry.LocalMachine;
    RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
    RegistryKey aimdir = software.OpenSubKey("XXX",true);
    subkeyNames = aimdir.GetSubKeyNames();
    foreach(string keyName in subkeyNames)
    {
    if(keyName == name)
    {
    _exit = true;
    return _exit;
    }
    }
    return _exit;
    }

    以上是在注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下XXX目录中判断名称为name注册表项是否存在,这一方法在删除注册表时已经存在,在新建一注册表项时也应有相应判断。

  • 相关阅读:
    find the first t.py file through traversal C: and D:
    gevent simple server
    【python实例】判断是否是回文数
    【python实例】要求输出字符串中最少一个最多八个的所有字符串组合(连续)
    【python实例】统计字符串里大写字母,小写字母和非字母的个数
    【python基础】字符串方法汇总
    【python实例】判断质数:for-break-else
    【python实例】while&for 九九乘法表
    【python实例】水仙花数:每个位上的数值的三次方求和,刚好是这个三位数本身
    【python实例】判断输入年份是否是闰年
  • 原文地址:https://www.cnblogs.com/dreamflycc/p/2799840.html
Copyright © 2020-2023  润新知