自己封装的注册表操作类

来源:互联网 发布:做淘宝推广工资怎么样 编辑:程序博客网 时间:2024/05/21 20:07
 
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using Microsoft.Win32;
  5. namespace WWBClassLib.PC
  6. {
  7.     public class RegEdit
  8.     {
  9.         /// <summary>
  10.         /// 
  11.         /// </summary>
  12.         /// <param name="RegUrl">节点路径(全路径 HKEY_LOCAL_MACHINE/SOFTWARE ) 用 "/" 分隔</param>
  13.         /// <param name="name">项目名称</param>
  14.         /// <returns></returns>
  15.         public static string GetRegistData(string RegUrl,string name)
  16.         {
  17.             string registData;
  18.             char[] sp = {'/'};
  19.             string[] nodes = RegUrl.Split(sp);
  20.             RegistryKey root = null;
  21.             switch (nodes[0].ToUpper())
  22.             {
  23.                 case "HKEY_CLASSES_ROOT":
  24.                     root = Registry.ClassesRoot;
  25.                     break;
  26.                 case "HKEY_CURRENT_USER":
  27.                     root = Registry.CurrentUser;
  28.                     break;
  29.                 case "HKEY_LOCAL_MACHINE":
  30.                     root = Registry.LocalMachine;
  31.                     break;
  32.                 case "HKEY_USERS":
  33.                     root = Registry.Users;
  34.                     break;
  35.                 case "HKEY_CURRENT_CONFIG":
  36.                     root = Registry.CurrentConfig;
  37.                     break;
  38.                 
  39.             }
  40.             if (root == null)
  41.             {
  42.                 return "error root";
  43.             }
  44.             RegistryKey node = root;
  45.             for (int i = 1; i < nodes.Length; i++)
  46.             {
  47.                
  48.                 node = node.OpenSubKey(nodes[i], true);
  49.                 if (node == null)
  50.                 {
  51.                     return nodes[i] + "节点不存在";
  52.                 }
  53.                 
  54.             }
  55.             
  56.             registData = node.GetValue(name).ToString();
  57.             return registData;
  58.         }
  59.         /// <summary>
  60.         /// 写入注册表值
  61.         /// </summary>
  62.         /// <param name="RegUrl">路径(全路径,不存在的节点自动创建)</param>
  63.         /// <param name="name">名称</param>
  64.         /// <param name="value">值</param>
  65.         /// <returns></returns>
  66.         public static string WTRegedit(string RegUrl, string name, object value)
  67.         {
  68.            
  69.             char[] sp = { '/' };
  70.             string[] nodes = RegUrl.Split(sp);
  71.             RegistryKey root = null;
  72.             switch (nodes[0].ToUpper())
  73.             {
  74.                 case "HKEY_CLASSES_ROOT":
  75.                     root = Registry.ClassesRoot;
  76.                     break;
  77.                 case "HKEY_CURRENT_USER":
  78.                     root = Registry.CurrentUser;
  79.                     break;
  80.                 case "HKEY_LOCAL_MACHINE":
  81.                     root = Registry.LocalMachine;
  82.                     break;
  83.                 case "HKEY_USERS":
  84.                     root = Registry.Users;
  85.                     break;
  86.                 case "HKEY_CURRENT_CONFIG":
  87.                     root = Registry.CurrentConfig;
  88.                     break;
  89.             }
  90.             if (root == null)
  91.             {
  92.                 return "error root";
  93.             }
  94.             RegistryKey node = root;
  95.             for (int i = 1; i < nodes.Length; i++)
  96.             {
  97.                 if(!IsRegeditExit(node,nodes[i]))
  98.                 {
  99.                     node = node.CreateSubKey(nodes[i]);
  100.                     continue;
  101.                 }
  102.                 node = node.OpenSubKey(nodes[i], true);
  103.                 
  104.             }
  105.             node.SetValue(name, value);
  106.             return "";
  107.         }
  108.         private static bool IsRegeditExit(RegistryKey node ,string name)
  109.         {
  110.             string [] subkeyNames = node.GetSubKeyNames();
  111.             foreach (string keyName in subkeyNames)
  112.             {
  113.                 if (keyName == name)
  114.                 {
  115.                      
  116.                      return true;
  117.                 }
  118.             }
  119.             return false;
  120.         }
  121.         /// <summary>
  122.         /// 删除注册表节点
  123.         /// </summary>
  124.         /// <param name="RegUrl">路径(全路径)</param>
  125.         /// <param name="name">键值(节点值)</param>
  126.          /// <returns></returns>
  127.         public static string DeleteRegist(string RegUrl, string name)
  128.         {
  129.             char[] sp = { '/' };
  130.             string[] nodes = RegUrl.Split(sp);
  131.             RegistryKey root = null;
  132.             switch (nodes[0].ToUpper())
  133.             {
  134.                 case "HKEY_CLASSES_ROOT":
  135.                     root = Registry.ClassesRoot;
  136.                     break;
  137.                 case "HKEY_CURRENT_USER":
  138.                     root = Registry.CurrentUser;
  139.                     break;
  140.                 case "HKEY_LOCAL_MACHINE":
  141.                     root = Registry.LocalMachine;
  142.                     break;
  143.                 case "HKEY_USERS":
  144.                     root = Registry.Users;
  145.                     break;
  146.                 case "HKEY_CURRENT_CONFIG":
  147.                     root = Registry.CurrentConfig;
  148.                     break;
  149.             }
  150.             if (root == null)
  151.             {
  152.                 return "error root";
  153.             }
  154.             RegistryKey node = root;
  155.             for (int i = 1; i < nodes.Length; i++)
  156.             {
  157.                 node = node.OpenSubKey(nodes[i], true);
  158.                 if (node == null)
  159.                 {
  160.                     return nodes[i] + "节点不存在";
  161.                 }
  162.             }
  163.             if (!IsRegeditExit(node, name))
  164.             {
  165.                 return name + "键值不存在";
  166.             }
  167.             else
  168.             {
  169.                 node.DeleteSubKeyTree(name);
  170.             }
  171.             return "";
  172.             
  173.         } 
  174.     }
  175. }
原创粉丝点击