C#中对注册表的操作

Windows 操作系统的注册表包含了很多有关计算机运行的配置方式,打开注册表我们可以看到注册表是按类似于目录的树结构组织的,其中第二级目录包含了五个预定义主键分别是:HKEY_CLASSES_ROOT,HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_USERS,HKEY_CURRENT_CONFIG。
        下面我们来分别解释这5个类的作用
        HKEY_CLASSES_ROOT该主键包含了文件的扩展名和应用程序的关联信息以及Window Shell和OLE用于储存注册表的信息。该主键下的子键决定了在WINDOWS中如何显示该类文件以及他们的图标,该主键是从HKEY_LCCAL_MACHINE/SOFTWARE/Classes映射过来的。
        HKEY_CURRENT_USER该主键包含了如用户窗口信息,桌面设置等当前用户的信息。
        HKEY_LOCAL_MACHINE主键包含了计算机软件和硬件的安装和配置信息,该信息可供所有用户使用
        HKEY_USERS该主键记录了当前用户的设置信息,每次用户登入系统时,就会在该主键下生成一个与用户登入名一样的子键,该子键保存了当前用户的桌面设置、背景位图、快捷键,字体等信息。一般应用程序不直接访问改主键,而是通过主键HKEY_CURRENT_USER进行访问。
        HKEY_CURRENT_CONFIG该主键保存了计算机当前硬件的配置信息,这些配置可以根据当前所连接的网络类型或硬件驱动软件安装的改变而改变。
        C#也支持对注册表的编辑,.NET框架在Microsoft.Win32名字空间中提供了两个类来操作注册表:Registry和RegistryKey。这两个类都是密封类不允许被继承。下面我们分别来介绍这两个类。
        Registry类提供了7个公共的静态域,分别代表7个基本主键(其中两个在XP系统中没有,在这就不介绍了)分别是:Registry.ClassesRoot,Registry.CurrentUser,Registry.LocalMachine,Registry.Users,Registry.CurrentConfig。它们分别对应哪几个键我想各位一看就会知道吧。
        RegistryKey类中提供了对注册表操作的方法。要注意的是操作注册表必须符合系统权限,否则将会抛出错误。
            下面我们就来几个操作注册表常用的几个方法
                    创建子键的方法原型为:
                            public RegistryKey CreateSubKey(string sunbkey);
                         参数sunbkey表示要创建的子键的名称或路径名。创建成功返回被创建的子键,否则返回null。
                    打开子键的方法原型为:
                            public RegistryKey OpenSubKey(string name);
                            public RegistryKey OpenSubKey(string name,bool writable);
                               参数name表示要打开的子键名或其路径名,参数writable表示被打开的子键是否允许被修改,第一个方法打开的子键是只读的。Microsoft.Win32类还为我们提供了另一个方法,用于打开远程计算机上的注册表,方法原型为:
                            public static RegistryKey OpenRemoteBaseKey(RegistryHive hKey,string machineName);
                    删除子键的方法原型为:
                            public void DeleteSubKey(string subkey);
                            该方法用于删除指定的主键。如果要删除的子键还包含主键则删除失败,并返回一个异常,如果要彻底删除该子键极其目录下的子键可以用方法DeleteSubKeyTree,该方法原型如下:
                            public void DeleteSunKeyTree(string subkey);
                    读取键值的方法原型如下:
                            public object GetValue(string name);
                            public object GetValue(string name,object defaultValue);
                        参数name表示键的名称,返回类型是一个object类型,如果指定的键不存在则返回null。如果失败又不希望返回的值是null则可以指定参数defaultValue,指定了参数则在读取失败的情况下返回该参数指定的值。
                    设置键值的方法原型如下:
                            public object SetValue(string name,object value);
                    删除键值的方法原型如下:
                            public void DeleteValue(string name);
哇吃饭的时间到了等下再来继续写示例。
            昨天由于吃好饭帮朋友找论文找到很玩就来步及接下去写了,今天就来完成示例部分。
            这个示例很简单就是隐藏开始菜单下的运行选项,实现方法也很简单只要稍微修改下注册表也可以实现,这里我们用程序来实现,我们通过在HKEY_CURRENT_USER//Software//Microsoft//Window//CurrentVersion//Policies//Explorer主键下新建一个DWORD键值NoRun设置其值为1就可以了,上面我们说过Windows的桌面设置大多放在HKEY_CURRENT_USER主键中。下面我们就来写示例的实现代码:
                        using System;
                        using Microsoft.Win32;
                        class Test
                        {
                            public static void Main()
                                {
                                        RegistryKey key=Registry.CurrentUser;
                                        RegistryKey Tkey=key.CreateSubKey(“Software//Microsoft//Windows//CurrentVersion//Policies//Explorer”);
                                        Tkey.SetValue(”NoRun”,1);
                                        Tkey.Close();
                                }
                        }
呵呵,代码就这么点,呵呵!!
                        如果你想屏蔽关闭系统,查找功能,注销和文档选项也可以至于怎么屏蔽就自己慢慢摸索吧,先告诉你和屏蔽运行菜单是一样的就建的键值不同。好了就到这里了,结束!!!

转帖者再加一个例子,不过内容都差不多:

try
{
     //关于OpenSubKey的用法请见http://msdn2.microsoft.com/zh-cn/library/microsoft.win32.registrykey.opensubkey(vs.80).aspx
     RegistryKey rk = Registry.CurrentUser.OpenSubKey("Software").OpenSubKey("yolon",true); //打开在HKEY_CURRENT_USER下面的Software下面的项“yolon”
     if (rk == null)//如果找不到该项
     {
          //创建一个新的项,OpenSubKey里第二个参数true,代表可写方式打开项
            rk = Registry.CurrentUser.OpenSubKey("Software",true).CreateSubKey("yolon");
     }
     if (rk == null)//如果还找不到项
     {
          MessageBox.Show("未能创建注册表信息,请以系统管理员权限运行本监控程序");//弹出提示
          Application.Exit();//程序退出
     }
     string val= Convert.ToString(rk.GetValue("项目"));//读取rk项里“项目”的值
      if (val == "")
     {
          //关于SetValue的用法请见http://msdn2.microsoft.com/zh-cn/library/microsoft.win32.registry.setvalue.aspx
          rk.SetValue("项目", @"值",RegistryValueKind.String);
     }
}
catch (Exception err)
{
      MessageBox.Show("未知注册表错误,详细:/n/r"+err.ToString());//弹出提示
      Application.Exit();//程序退出
}

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值