C#.NET对注册表的常用操作(增加项,判断指定项是否存在,增加键(键的名称,键的数值),判断指定的键是否存在)

时间:2020-11-26 10:03:25

建立一个对注册表的常用操作的工具类。在HKEY_LOCAL_MACHINE/SOFTWARE下,增加项,判断指定项是否存在,增加键(键的名称,键的数值),判断指定的键是否存在

[c-sharp]  view plain  copy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. //倒入必须的命名空间  
  7. using Microsoft.Win32;  
  8. using Maticsoft.DBUtility;  
  9.   
  10. namespace Utility  
  11. {  
  12.     /// <summary>  
  13.     /// 注册表操作,在HKEY_LOCAL_MACHINE/SOFTWARE下,增加项,判断指定项是否存在,增加键(键的名称,键的数值),判断指定的键是否存在  
  14.     /// </summary>  
  15.     public class RegeditUtil  
  16.     {  
  17.         private static string _itemname = string.Empty;  
  18.   
  19.         /// <summary>  
  20.         /// 注册表左侧的项(左半边带有文件夹图标的节点)  
  21.         /// </summary>  
  22.         public static string ItemName{  
  23.             set  
  24.             {  
  25.                 _itemname = value;  
  26.             }  
  27.             get  
  28.             {  
  29.                 return _itemname;   
  30.             }  
  31.         }  
  32.   
  33.         /// <summary>  
  34.         /// 增加键,如果没有,创建  
  35.         /// </summary>  
  36.         /// <param name="keyName">键的名称</param>  
  37.         /// <param name="keyValue">键的数值</param>  
  38.         public static void RegeditAdd(string keyName, string keyValue)  
  39.         {  
  40.             //首先判断是否存在ItemName项,没有就建立  
  41.             if (!RegeditItemExist(ItemName))//  
  42.             {  
  43.                 //获取HKEY_LOCAL_MACHINE节点  
  44.                 RegistryKey key = Registry.LocalMachine;  
  45.   
  46.                 //建立该节点,如果该节点已经存在,则不影响  
  47.                 key.CreateSubKey("SOFTWARE//" + ItemName);  
  48.             }  
  49.             if (!RegeditKeyExist(keyName))//然后判断Zane项中是否有zane键,没有就添加默认密码记录  
  50.             {  
  51.                 RegistryKey key = Registry.LocalMachine;  
  52.                 RegistryKey software = key.OpenSubKey("SOFTWARE//"+ItemName, true);  //该项必须已存在  
  53.   
  54.                 software.SetValue(keyName, keyValue);  
  55.             }  
  56.         }  
  57.   
  58.         /// <summary>  
  59.         /// 根据节点的名称,验证该节点是否存在   
  60.         /// </summary>  
  61.         /// <returns></returns>  
  62.         public static bool RegeditItemExist(string itemName)  
  63.         {  
  64.             string[] subkeyNames;  
  65.             RegistryKey hkml = Registry.LocalMachine;  
  66.             RegistryKey software = hkml.OpenSubKey("SOFTWARE");  
  67.   
  68.             //如果注册表中不存在该项则返回  
  69.             if (software == null)  
  70.                 return false;  
  71.   
  72.             subkeyNames = software.GetSubKeyNames();  
  73.             //取得该项下所有子项的名称的序列,并传递给预定的数组中    
  74.             foreach (string keyName in subkeyNames)   //遍历整个数组    
  75.             {  
  76.                 //判断子项的名称    
  77.                 if (keyName == itemName)   
  78.                 {  
  79.                     hkml.Close();  
  80.                     return true;  
  81.                 }  
  82.             }  
  83.             hkml.Close();  
  84.             return false;  
  85.         }  
  86.   
  87.         /// <summary>  
  88.         /// 根据键的名称,验证该键是否存在  
  89.         /// </summary>  
  90.         /// <param name="keyName">键的名称</param>  
  91.         /// <returns></returns>  
  92.         public static bool RegeditKeyExist(string keyName)  
  93.         {  
  94.             string[] subkeyNames;  
  95.             RegistryKey hkml = Registry.LocalMachine;  
  96.             RegistryKey software = hkml.OpenSubKey("SOFTWARE//"+ItemName);  
  97.               
  98.   
  99.             //如果注册表中不存在该项则返回  
  100.             if (software == null)  
  101.                 return false;  
  102.   
  103.             subkeyNames = software.GetValueNames();  
  104.   
  105.             //取得该项下所有键值的名称的序列,并传递给预定的数组中     
  106.             foreach (string itemKeyName in subkeyNames)  
  107.             {  
  108.                 if (itemKeyName == keyName)    //判断键值的名称     
  109.                 {  
  110.                     hkml.Close();  
  111.                     return true;  
  112.                 }  
  113.             }  
  114.             hkml.Close();  
  115.             return false;  
  116.         }  
  117.   
  118.         /// <summary>  
  119.         /// 根据键的名称,获得该键的数据  
  120.         /// </summary>  
  121.         /// <param name="keyName">键的名称</param>  
  122.         /// <returns></returns>  
  123.         public static string GetValeByName(string keyName)  
  124.         {  
  125.             RegistryKey Key = Registry.LocalMachine;  
  126.             RegistryKey Zane = Key.OpenSubKey("SOFTWARE//" + ItemName, true);  
  127.             string regName = Zane.GetValue(keyName).ToString();  
  128.   
  129.             Zane.Close();  
  130.             return regName;  
  131.         }  
  132.   
  133.        /// <summary>  
  134.        /// 根据键的名称,删除该键(值)  
  135.        /// </summary>  
  136.        /// <param name="keyName">键的名称</param>  
  137.        /// <returns></returns>  
  138.         public static bool DeleteRegist(string keyName)  
  139.         {  
  140.             string[] keys;  
  141.             RegistryKey hkml = Registry.LocalMachine;  
  142.             RegistryKey software = hkml.OpenSubKey("SOFTWARE"true);  
  143.             RegistryKey item = software.OpenSubKey(ItemName, true);  
  144.   
  145.             //如果注册表中不存在该项则返回  
  146.             if (item == null)  
  147.                 return false;  
  148.   
  149.             keys = item.GetValueNames();  
  150.             foreach (string key in keys)  
  151.             {  
  152.                 if (key == keyName)  
  153.                 {  
  154.                     item.DeleteValue(key);  
  155.                     return true;  
  156.                 }  
  157.             }  
  158.             return true;  
  159.         }  
  160.     }  
  161. }  

使用:

[c-sharp]  view plain  copy
  1. private void button1_Click(object sender, EventArgs e)  
  2. {  
  3.     //指定项的名称为BaiDu  
  4.   
  5.     Utility.RegeditUtil.ItemName = "BaiDu";  
  6.   
  7.     //再在该项中增加键(键名称,键的数值)  
  8.     Utility.RegeditUtil.RegeditAdd("aaaa""1111111111");  
  9. }  

 

运行效果:

C#.NET对注册表的常用操作(增加项,判断指定项是否存在,增加键(键的名称,键的数值),判断指定的键是否存在)