以下从‘读’‘写’‘删除’‘判断’四个事例实现对注册表的简单操作

来源:互联网 发布:爱如生古籍数据库 编辑:程序博客网 时间:2024/05/01 12:38

以下从‘读’‘写’‘删除’‘判断’四个事例实现对注册表的简单操作
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注册表项是否存在,这一方法在删除注册表时已经存在,在新建一注册表项时也应有相应判断;

 

 

下面给的例子首先是比较普遍的,层级少的,所以每级都会定义一个      RegistryKey

//读取指定键路径的值
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;
}
//创建新值
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);
}
//删除指定值
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);
      }
}
//判断指定键是否存在
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;
}

再给个实际的例子,如何通过C#获得"本地连接"列表名

public     void CreateList()
           {

               RegistryKey RegKey = Registry.LocalMachine;

               RegKey = RegKey.OpenSubKey(@"SYSTEM/ControlSet001/Control/Network/{4D36E972-E325-11CE-BFC1-08002BE10318}");

               string[] KeysList = null;
               if(RegKey.GetSubKeyNames().Length>0)
                KeysList = RegKey.GetSubKeyNames();       //Get List

            foreach (string Key in KeysList)
            {

                //Except "useable" key--"Connection",it's other names "Descriptions";

                if (Key == "Descriptions")

                    continue;

                RegistryKey SubKey = RegKey.OpenSubKey(Key);

                SubKey = SubKey.OpenSubKey("Connection");

                comboBox1.Items.Add(SubKey.GetValue("Name"));

            }

           }

最后,再给一个完整的读注册表的类的

/// <summary>
          /// 从注册表读取信息
         /// </summary>
         /// <param >路径</param>
         /// <param >值名</param>
         /// <returns>数据</returns>
          private object GetRegValue(string strRegPath, string strName)
          {
              strRegPath = strRegPath.Trim();
              //接收值的对象  
              object objRet;

              // 如果名称为空,则抛出一个参数为空的异常。   
              if (strName == "")
              {
                  throw new ArgumentNullException(strName, "键值不能为空!");
              }

              //去除"/"字符
              if (strRegPath.StartsWith("//"))
              {
                  strRegPath = strRegPath.Substring(1, strRegPath.Length - 1);
              }
              if (strRegPath.EndsWith("//"))
              {
                  strRegPath = strRegPath.Substring(0, strRegPath.Length - 1);
              }


              //拆分根键和路径   
              string strRootKey, strPath;
              int intIndex = strRegPath.IndexOf("//");

              strRootKey = strRegPath.Substring(0, intIndex).ToUpper();

              strPath = strRegPath.Substring(intIndex + 1, strRegPath.Length - intIndex - 1);
              RegistryKey _root;
              switch (strRootKey)
              {
                  case "HKEY_CLASSES_ROOT":
                      _root = Registry.ClassesRoot;
                      break;
                  case "HKEY_CURRENT_CONFIG":
                      _root = Registry.CurrentConfig;
                      break;
                  case "HKEY_CURRENT_USER":
                      _root = Registry.CurrentUser;
                      break;
                  case "HKEY_DYN_DATA":
                      _root = Registry.DynData;
                      break;
                  case "HKEY_LOCAL_MACHINE":
                      _root = Registry.LocalMachine;
                      break;
                  case "HKEY_PERFORMANCE_DATA":
                      _root = Registry.PerformanceData;
                      break;
                  case "HKEY_USERS":
                      _root = Registry.Users;
                      break;
                  default:
                      throw new Exception("找不到路径!");
              }

              try
              {
                  //打开注册表路径的键    
                  RegistryKey regKey = _root.OpenSubKey(@strPath);
                  //取值
                  objRet = regKey.GetValue(strName);
              }
              catch (Exception e)
              {
                  throw e;
              }

              return objRet;
          }

实例:string Url = GetRegValue(@"HKEY_LOCAL_MACHINE/SOFTWARE/Mysoft/paeq/ServicePath","ServicePath").ToString

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 fs免拆模板专利怎么办 新买的床咯吱响怎么办 实木床一动就响怎么办 cad图纸是斜的怎么办 老房子土墙腻子老掉怎么办 生完孩子子宫大怎么办 刚开的店没人怎么办 刚开业的店没人怎么办 美容店没人进店怎么办 新店开业招不到营业员怎么办 无意开通了花呗怎么办? 花呗灰色用不了怎么办 花呗逾期用不了怎么办 店铺花呗关闭了怎么办 花呗无法使用了怎么办 借呗自动关闭了怎么办 蚂蚁花呗无法开通怎么办 花呗本月还不了怎么办 蚂蚁借呗没钱还怎么办 淘宝账号被限制登录怎么办 辱骂买家被投诉骚扰怎么办 淘宝卖家骚扰买家怎么办 被淘宝卖家电话骚扰怎么办 闲鱼卖东西买家退货运费怎么办 淘宝被恶意拍单怎么办 炒作信用度评价被删除怎么办 删除淘宝评价之后卖家不返现怎么办 美团客户给差评怎么办 淘宝卖家评价差怎么办 淘宝卖家发货未揽收怎么办 周不过5我超过了怎么办 淘宝申请退款后卖家不确认怎么办 淘宝直通车b类扣12分怎么办 淘宝店铺被买家投诉怎么办 淘宝店铺遭买家投诉怎么办 淘宝店铺被买家恶意投诉怎么办 苹果手机无法识别指纹怎么办 淘宝店铺虚假交易违规怎么办 斗鱼直播太卡怎么办 神笔添加视频尺码不符合怎么办 闲鱼卖家单号填错了怎么办