zoukankan      html  css  js  c++  java
  • C#操作注册表(转)

    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注册表项是否存在,这一方法在删除注册表时已经存在,在新建一注册表项时也应有相应判断;  

    一个例子:

    using Microsoft.Win32;
        using System.Diagnostics;
        private void Access_Registry()
        {
             // 在HKEY_LOCAL_MACHINE\Software下建立一新键,起名为MCBInc
                RegistryKey key = Registry.LocalMachine.OpenSubKey("Software", true);
             // 增加一个子键
                RegistryKey newkey = key.CreateSubKey("MCBInc");
       
     // 设置此子键的值
                newkey.SetValue("MCBInc", "NET Developer");
             
    // 从注册表的其他地方获取数据
             
    // 找出你的CPU
                RegistryKey pRegKey = Registry.LocalMachine;
                pRegKey = pRegKey.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0");
                Object val = pRegKey.GetValue("VendorIdentifier");
                Debug.WriteLine("The central processor of this machine is:"+ val);
             // 删除键值
                RegistryKey delKey = Registry.LocalMachine.OpenSubKey("Software", true);
                delKey.DeleteSubKey("MCBInc");
        }

    [转]C#操作注册表

    在注册表编辑器里右键点击一个子项选择“新建”,我们就会看到如图1,新建项的菜单里分为上下两部分,上面的“项”指得是在新建一个下一级项;下面的B指得是建立项的键,键的类型分为图所示的五种。

    二.接着来熟悉一下C#中修改注册表的方法与函数。
    在VC#中提供了Registry类、RegistryKey类来实现对注册表的操作。
    其中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主键

    RegistryKey类封装了对注册表的基本操作,包括读取,写入,删除。
    其中读取的主要函数有: 
    OpenSubKey ( string name )方法主要是打开指定的子键。
    GetSubKeyNames ( )方法是获得主键下面的所有子键的名称,它的返回值是一个字符串数组。
    GetValueNames ( )方法是获得当前子键中的所有的键名称,它的返回值也是一个字符串数组。
    GetValue ( string name )方法是指定键的键值。

    写入的函数:
        CreateSubKey(string name)方法是增加一个子键
        SetValue(string name,string value)方法是设置一个键的键值

    删除的函数:
      DeleteSubKey ( )方法:删除一个指定的子键。
      DeleteSubKeyTree ( )方法:此方法是彻底删除指定的子键目录,即:删除该子键以及该子键以下的全部子键。

    在下面的例子里,要注意:
      建项函数:CreateSubKey()
      建子键函数:SetValue();

    class Program
        {
            static string Generateguid()//建立GUID值的函数
            {
                return System.Guid.NewGuid().ToString();
            }
            static void Main(string[] args)
            {
                RegistryKey pregkey;
                string preName;
                //pregkey = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop\\WindowMetrics",true);
                pregkey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Internet Explorer\\Extensions",true);//以只读方式检索子项
                if (pregkey == null)
                {
                    Console.WriteLine("该键值不存在");
                  
                }
                else
                {
                    preName = Generateguid();
                    Console.WriteLine(preName);
                    Console.WriteLine("找到该键值");
                    preName = "{" + preName + "}";
                    //pregkey.SetValue("MinAnimate","1");
                    pregkey.CreateSubKey(preName);//建立子项
                    pregkey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Internet Explorer\\Extensions\\"+preName, true);
                    //pregkey.SetValue("bbbbb", "0");//建立子键,如果有此子键,则设值。
                    pregkey.SetValue("ButtonText", "添加");//鼠标放到bar上时显示的文字
                    pregkey.SetValue("CLSID", "{1FBA04EE-3024-11d2-8F1F-0000F87ABD16}");//CLSID固定
                    pregkey.SetValue("Default Visible", "yes");//默认可看见
                    pregkey.SetValue("Exec", "D:/IEbar/IEpinout.exe");//关联的exe文件
                    pregkey.SetValue("HotIcon", "D:/IEbar/Icon2.ico");//鼠标放到bar上时显示的图样
                    pregkey.SetValue("Icon", "D:/IEbar/Icon1.ico");//鼠标未放在bar上时显示的图样
                    //pregkey.SetValue("MenuStatusBar", "杨");
                    //pregkey.SetValue("MenuText", "我是杨!");
                  
                }
                pregkey.Close();
            }
        }

    此例子在vs2005,xp系统下调试通过。
    生成exe文件,直接运行,然后打开ie查看工具栏上的效果。
    注意:必需要有"D:/IEbar/Icon2.ico"和"D:/IEbar/Icon1.ico"这两个文件,否则在ie上看不出效果。

  • 相关阅读:
    稳扎稳打Silverlight(47) 4.0UI之操作剪切板, 隐式样式, CompositeTransform, 拖放外部文件到程序中
    返璞归真 asp.net mvc (9) asp.net mvc 3.0 新特性之 View(Razor)
    返璞归真 asp.net mvc (6) asp.net mvc 2.0 新特性
    稳扎稳打Silverlight(48) 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八
    精进不休 .NET 4.0 (9) ADO.NET Entity Framework 4.1 之 Code First
    稳扎稳打Silverlight(42) 4.0控件之Viewbox, RichTextBox
    稳扎稳打Silverlight(53) 4.0通信之对WCF NetTcpBinding的支持, 在Socket通信中通过HTTP检索策略文件, HTTP请求中的ClientHttp和BrowserHttp
    稳扎稳打 Silverlight 4.0 系列文章索引
    稳扎稳打Silverlight(54) 4.0通信之对UDP协议的支持: 通过 UdpAnySourceMulticastClient 实现 ASM(Any Source Multicast),即“任意源多播”
    返璞归真 asp.net mvc (8) asp.net mvc 3.0 新特性之 Model
  • 原文地址:https://www.cnblogs.com/weixing/p/2114627.html
Copyright © 2011-2022 走看看