用C#操作类读写WinCE平台Mac地址代码祥解(转叶帆)

来源:互联网 发布:遇见淘宝店 编辑:程序博客网 时间:2024/06/08 02:06

 前段时间在测试我们触摸屏联网性能的时候,由于屏的Mac地址通过注册表设置,而PB定制WinCE内核的时候就有一个默认值,所以一批下来Mac地址都一样,两台以上的机器一联网准出问题,通过注册表软件去修改Mac地址太麻烦了,所以做了一个小的Mac地址软件。
现在用C#做了一个注册表操作类也别简单的只做数据读写了,索性也做个全功能的了。由于.Net在域名空间Microsoft.Win32中提供RegistryKey类,操作注册表还是比较方便的,唯感不足的时在操作多级子键的时候不很便捷,所以在封装注册表操作类的时候也把这部分内容给考虑进去了。
注册表操作类代码(可以用在.Net精简框架集下)如下:


 

 

///<summary>

  1. ///注册表操作类 -- 叶帆工作室
  2. ///</summary>
  3. public class YFReg
  4. {
  5.     public enum HKEY { HKEY_LOCAL_MACHINE = 0, HKEY_CLASSES_ROOT = 1, HKEY_CURRENT_USER = 2, HKEY_USERS = 3 };
  6.     private RegistryKey[] reg = new RegistryKey[4];
  7.     public YFReg()
  8.     {
  9.         reg[(int)HKEY.HKEY_LOCAL_MACHINE] = Registry.LocalMachine;
  10.         reg[(int)HKEY.HKEY_CLASSES_ROOT] = Registry.ClassesRoot;
  11.         reg[(int)HKEY.HKEY_CURRENT_USER] = Registry.CurrentUser;
  12.         reg[(int)HKEY.HKEY_USERS] = Registry.Users; 
  13.     }
  14.     //读指定变量值
  15.     public string ReadValue(HKEY Root,string SubKey,string ValueName)
  16.     {
  17.         RegistryKey subKey=reg[(int)Root];
  18.         if (ValueName.Length == 0) return "[ERROR]";
  19.         try
  20.         {
  21.             if (SubKey.Length > 0)
  22.             {
  23.                 string[] strSubKey = SubKey.Split('//');
  24.                 foreach (string strKeyName in strSubKey)
  25.                 {
  26.                     subKey = subKey.OpenSubKey(strKeyName);
  27.                 }
  28.             }
  29.             string strKey = subKey.GetValue(ValueName).ToString();
  30.             subKey.Close();
  31.             return strKey;
  32.         }
  33.         catch
  34.         {
  35.             return "[ERROR]";
  36.         }
  37.     }
  38.     //读指定变量的类型
  39.     public RegistryValueKind ReadValueType(HKEY Root, string SubKey, string ValueName)
  40.     {
  41.         RegistryKey subKey = reg[(int)Root];
  42.         if (ValueName.Length == 0) return RegistryValueKind.Unknown;
  43.         try
  44.         {
  45.             if (SubKey.Length > 0)
  46.             {
  47.                 string[] strSubKey = SubKey.Split('//');
  48.                 foreach (string strKeyName in strSubKey)
  49.                 {
  50.                     subKey = subKey.OpenSubKey(strKeyName);
  51.                 }
  52.             }
  53.             RegistryValueKind valueType = subKey.GetValueKind(ValueName);                
  54.             subKey.Close();
  55.             return valueType;
  56.         }
  57.         catch
  58.         {
  59.             return RegistryValueKind.Unknown;
  60.         }
  61.     }
  62.     //写指定变量值
  63.     public int WriteValue(HKEY Root, string SubKey, string ValueName, string ValueData)
  64.     {
  65.         return WriteValue(Root, SubKey, ValueName, ValueData, RegistryValueKind.String); 
  66.     }
  67.     
  68.     //写指定变量值
  69.     public int WriteValue(HKEY Root, string SubKey, string ValueName,object ValueData,RegistryValueKind ValueType)
  70.     {
  71.         RegistryKey subKey = reg[(int)Root];
  72.         if (ValueName.Length == 0) return 2;
  73.         try
  74.         {
  75.             if (SubKey.Length > 0)
  76.             {
  77.                 string[] strSubKey = SubKey.Split('//');
  78.                 foreach (string strKeyName in strSubKey)
  79.                {
  80.                     subKey = subKey.CreateSubKey(strKeyName);
  81.                 }
  82.             }
  83.             subKey.SetValue(ValueName, ValueData, ValueType);
  84.             subKey.Close();
  85.             return 0;
  86.         }
  87.         catch
  88.         {
  89.             return 1;
  90.         }
  91.     }
  92.     //删除指定变量
  93.     public int DeleteValue(HKEY Root, string SubKey, string ValueName)
  94.     {
  95.         RegistryKey subKey = reg[(int)Root];
  96.         try
  97.         {
  98.             if (SubKey.Length > 0)
  99.             {
  100.                 string[] strSubKey = SubKey.Split('//');
  101.                 foreach (string strKeyName in strSubKey)
  102.                 {
  103.                     subKey = subKey.OpenSubKey(strKeyName,true);
  104.                 }
  105.             }
  106.             subKey.DeleteValue(ValueName, true);
  107.             subKey.Close();
  108.             return 0;
  109.         }
  110.         catch
  111.         {
  112.             return 1;
  113.         }
  114.     }
  115.     //创建指定的键
  116.     public int CreateKey(HKEY Root, string SubKey, string KeyName)
  117.     {
  118.         RegistryKey subKey = reg[(int)Root];
  119.         if (KeyName.Length == 0) return 2;
  120.         try
  121.         {
  122.             if (SubKey.Length > 0)
  123.             {
  124.                 string[] strSubKey = SubKey.Split('//');
  125.                 foreach (string strKeyName in strSubKey)
  126.                 {
  127.                     subKey = subKey.CreateSubKey(strKeyName);
  128.                 }
  129.             }
  130.             subKey.CreateSubKey(KeyName);
  131.             subKey.Close();
  132.             return 0;
  133.         }
  134.         catch
  135.         {
  136.             return 1;
  137.         }
  138.     }
  139.     //删除指定的键
  140.     public int DeleteKey(HKEY Root, string SubKey, string KeyName)
  141.     {
  142.         RegistryKey subKey = reg[(int)Root];
  143.         try
  144.         {
  145.             if (SubKey.Length > 0)
  146.             {
  147.                 string[] strSubKey = SubKey.Split('//');
  148.                 foreach (string strKeyName in strSubKey)
  149.                 {
  150.                     subKey = subKey.OpenSubKey(strKeyName, true);
  151.                 }
  152.             }
  153.             subKey.DeleteSubKeyTree(KeyName);
  154.             subKey.Close(); 
  155.             return 0;
  156.         }
  157.         catch
  158.         {
  159.             return 1;
  160.         }
  161.     }
  162.  //判断指定的键是否存在
  163.     public int IsExistKey(HKEY Root, string SubKey, string KeyName)
  164.     {
  165.         RegistryKey subKey = reg[(int)Root];
  166.         try
  167.         {
  168.             if (SubKey.Length > 0)
  169.             {
  170.                 string[] strSubKey = SubKey.Split('//');
  171.                 foreach (string strKeyName in strSubKey)
  172.                 {
  173.                     subKey = subKey.OpenSubKey(strKeyName);
  174.                 }
  175.             }
  176.             string[] strSubKey1 = subKey.GetSubKeyNames();
  177.             foreach (string strKeyName in strSubKey1)
  178.             {
  179.                 if (strKeyName == KeyName) return 0;
  180.             }
  181.             return 1;
  182.         }
  183.         catch
  184.         {
  185.             return 2;
  186.         }
  187.     }
  188.     //枚举指定的键的子键
  189.     public string[] EnumKeyName(HKEY Root, string SubKey)
  190.     {            
  191.         RegistryKey subKey = reg[(int)Root];
  192.         if (SubKey.Length == 0) return null;
  193.         try
  194.         {
  195.             string[] strSubKey = SubKey.Split('//');
  196.             foreach (string strKeyName in strSubKey)
  197.             {
  198.                 subKey = subKey.OpenSubKey(strKeyName);
  199.             }
  200.             string[] strKey = subKey.GetSubKeyNames();
  201.             subKey.Close();
  202.             return strKey;
  203.         }
  204.         catch
  205.         {
  206.             return null;
  207.         }
  208.     }
  209.     
  210.     //枚举指定的键的值
  211.     public string[] EnumValueName(HKEY Root, string SubKey)
  212.     {
  213.         RegistryKey subKey = reg[(int)Root];
  214.         if (SubKey.Length == 0) return null;
  215.         try
  216.         {
  217.             string[] strSubKey = SubKey.Split('//');
  218.             foreach (string strKeyName in strSubKey)
  219.             {
  220.                 subKey = subKey.OpenSubKey(strKeyName);
  221.             }
  222.             string[] strValue = subKey.GetValueNames();
  223.             subKey.Close();
  224.             return strValue;
  225.         }
  226.         catch
  227.         {
  228.             return null;
  229.         }
  230.     }
  231. }
  232. 类出来了,用它读写Mac地址就是小菜一碟了,下面是读写Mac地址的示例代码:
  233. private void btnRead_Click(object sender, EventArgs e)
  234. {
  235.     txtMAC1.Text = reg.ReadValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms""SoftwareMacAddress0");
  236.     txtMAC2.Text = reg.ReadValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms""SoftwareMacAddress1");
  237.     txtMAC3.Text = reg.ReadValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms""SoftwareMacAddress2");
  238.     txtMAC4.Text = reg.ReadValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms""SoftwareMacAddress3");
  239.     txtMAC5.Text = reg.ReadValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms""SoftwareMacAddress4");
  240.     txtMAC6.Text = reg.ReadValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms""SoftwareMacAddress5"); 
  241. }
  242. private void btnWrite_Click(object sender, EventArgs e)
  243. {
  244.     int intRet = 0;
  245.     intRet += reg.WriteValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms""SoftwareMacAddress0", txtMAC1.Text);
  246.     intRet += reg.WriteValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms""SoftwareMacAddress1", txtMAC2.Text);
  247.     intRet += reg.WriteValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms""SoftwareMacAddress2", txtMAC3.Text);
  248.     intRet += reg.WriteValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms""SoftwareMacAddress3", txtMAC4.Text);
  249.     intRet += reg.WriteValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms""SoftwareMacAddress4", txtMAC5.Text);
  250.     intRet += reg.WriteValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms""SoftwareMacAddress5", txtMAC6.Text);
  251.     if (intRet > 0)
  252.     {
  253.         MessageBox.Show("更改失败");
  254.     }
  255. }