C#中对注册表的操作

转载 2007年09月27日 22:30:00

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();//程序退出
}

 

相关文章推荐

C#操作注册表~Regedit

转自:http://blog.csdn.net/zhangj1012003_2007/archive/2009/10/22/4712994.aspx 参考:http://zhidao.baidu.co...

C#操作注册表,设置系统环境变量

@bluesky 2014-07-28 22:35 字数 3398 阅读 1 C#操作注册表,设置系统环境变量 注册表 起因 最近重装系统,NX9.0太大了,不想...

C# 注册表操作 概述

注册表概述首先介绍下Windows操作系统中的注册表是什么?有什么作用?。很早以前的注册表咱就不管了,只说说目前主流的几个Windows操作系统中的注册表。按照我个人的理解,注册表在操作系统中的角色是...

C#学习笔记21——文件、目录、注册表操作

一, 管理文件系统文件系统包括Filedirectory Path FileInfo DirectoryInfo DriveInfo类,这些类的对应关系图:1,File directory 是静态类,...
  • byxdaz
  • byxdaz
  • 2011年09月03日 11:32
  • 1588

C#注册表操作汇总

一、注册表基本知识 1)       结构      键->项->子项->值项(名称、类型、数据)     REG_SZ         字符串     REG_BINARY    二进制 ...

c#操作注册表,设置可信站点和Active启用

c#操作注册表,设置可信站点和Active启用,代码如下:   /// /// 添加可信站点和active为启用 /// ///...
  • likang6
  • likang6
  • 2014年03月28日 15:47
  • 375

C#操作注册表全攻略

相信每个人对注册表并不陌生,在运行里面输入“regedit”就可以打开注册表编辑器了。这东西对Windows系统来说可是比较重要的,也是病毒常常会光顾的地方,比如病毒和恶意软件常常会在注册表的启动项里...

C#注册表操作

C#注册表操作,在注册表中设置软件为开机启动,文件拓展名关联到指定应用...

C#操作注册表全攻略

C#操作注册表全攻略 相信每个人对注册表并不陌生,在运行里面输入“regedit”就可以打开注册表编辑器了。这东西对Windows系统来说可是比较重要的,也是病毒常常会光顾的地方,比如病毒和恶意软件...
  • ipzlkmy
  • ipzlkmy
  • 2012年03月07日 23:17
  • 248

c#操作注册表实现对软件试用次数的限制

记录此次利用c#对开发的软件进行试用次数限制
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#中对注册表的操作
举报原因:
原因补充:

(最多只允许输入30个字)