前段時間在測試我們觸摸屏聯網性能的時候,由于屏的Mac位址通過系統資料庫設定,而PB定制WinCE核心的時候就有一個預設值,是以一批下來Mac位址都一樣,兩台以上的機器一聯網準出問題,通過系統資料庫軟體去修改Mac位址太麻煩了,是以做了一個小的Mac位址軟體。
系統資料庫操作類代碼(可以用在.Net精簡架構集下)如下:
///<summary>
///系統資料庫操作類 -- 葉帆工作室
///</summary>
public class YFReg
{
public enum HKEY { HKEY_LOCAL_MACHINE = 0, HKEY_CLASSES_ROOT = 1, HKEY_CURRENT_USER = 2, HKEY_USERS = 3 };
private RegistryKey[] reg = new RegistryKey[4];
public YFReg()
{
reg[(int)HKEY.HKEY_LOCAL_MACHINE] = Registry.LocalMachine;
reg[(int)HKEY.HKEY_CLASSES_ROOT] = Registry.ClassesRoot;
reg[(int)HKEY.HKEY_CURRENT_USER] = Registry.CurrentUser;
reg[(int)HKEY.HKEY_USERS] = Registry.Users;
}
//讀指定變量值
public string ReadValue(HKEY Root,string SubKey,string ValueName)
RegistryKey subKey=reg[(int)Root];
if (ValueName.Length == 0) return "[ERROR]";
try
{
if (SubKey.Length > 0)
{
string[] strSubKey = SubKey.Split('//');
foreach (string strKeyName in strSubKey)
{
subKey = subKey.OpenSubKey(strKeyName);
}
}
string strKey = subKey.GetValue(ValueName).ToString();
subKey.Close();
return strKey;
}
catch
return "[ERROR]";
//讀指定變量的類型
public RegistryValueKind ReadValueType(HKEY Root, string SubKey, string ValueName)
RegistryKey subKey = reg[(int)Root];
if (ValueName.Length == 0) return RegistryValueKind.Unknown;
foreach (string strKeyName in strSubKey)
RegistryValueKind valueType = subKey.GetValueKind(ValueName);
subKey.Close();
return valueType;
return RegistryValueKind.Unknown;
//寫指定變量值
public int WriteValue(HKEY Root, string SubKey, string ValueName, string ValueData)
return WriteValue(Root, SubKey, ValueName, ValueData, RegistryValueKind.String);
public int WriteValue(HKEY Root, string SubKey, string ValueName,object ValueData,RegistryValueKind ValueType)
if (ValueName.Length == 0) return 2;
{
subKey = subKey.CreateSubKey(strKeyName);
subKey.SetValue(ValueName, ValueData, ValueType);
return 0;
return 1;
//删除指定變量
public int DeleteValue(HKEY Root, string SubKey, string ValueName)
string[] strSubKey = SubKey.Split('//');
subKey = subKey.OpenSubKey(strKeyName,true);
subKey.DeleteValue(ValueName, true);
//建立指定的鍵
public int CreateKey(HKEY Root, string SubKey, string KeyName)
if (KeyName.Length == 0) return 2;
subKey.CreateSubKey(KeyName);
subKey.Close();
//删除指定的鍵
public int DeleteKey(HKEY Root, string SubKey, string KeyName)
foreach (string strKeyName in strSubKey)
subKey = subKey.OpenSubKey(strKeyName, true);
subKey.DeleteSubKeyTree(KeyName);
return 0;
//判斷指定的鍵是否存在
public int IsExistKey(HKEY Root, string SubKey, string KeyName)
string[] strSubKey1 = subKey.GetSubKeyNames();
foreach (string strKeyName in strSubKey1)
if (strKeyName == KeyName) return 0;
return 2;
//枚舉指定的鍵的子鍵
public string[] EnumKeyName(HKEY Root, string SubKey)
{
if (SubKey.Length == 0) return null;
string[] strSubKey = SubKey.Split('//');
foreach (string strKeyName in strSubKey)
subKey = subKey.OpenSubKey(strKeyName);
string[] strKey = subKey.GetSubKeyNames();
catch
return null;
//枚舉指定的鍵的值
public string[] EnumValueName(HKEY Root, string SubKey)
{
foreach (string strKeyName in strSubKey)
string[] strValue = subKey.GetValueNames();
return strValue;
}
類出來了,用它讀寫Mac位址就是小菜一碟了,下面是讀寫Mac位址的示例代碼:
private void btnRead_Click(object sender, EventArgs e)
txtMAC1.Text = reg.ReadValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms", "SoftwareMacAddress0");
txtMAC2.Text = reg.ReadValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms", "SoftwareMacAddress1");
txtMAC3.Text = reg.ReadValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms", "SoftwareMacAddress2");
txtMAC4.Text = reg.ReadValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms", "SoftwareMacAddress3");
txtMAC5.Text = reg.ReadValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms", "SoftwareMacAddress4");
txtMAC6.Text = reg.ReadValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms", "SoftwareMacAddress5");
private void btnWrite_Click(object sender, EventArgs e)
int intRet = 0;
intRet += reg.WriteValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms", "SoftwareMacAddress0", txtMAC1.Text);
intRet += reg.WriteValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms", "SoftwareMacAddress1", txtMAC2.Text);
intRet += reg.WriteValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms", "SoftwareMacAddress2", txtMAC3.Text);
intRet += reg.WriteValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms", "SoftwareMacAddress3", txtMAC4.Text);
intRet += reg.WriteValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms", "SoftwareMacAddress4", txtMAC5.Text);
intRet += reg.WriteValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm/DM9CE1/Parms", "SoftwareMacAddress5", txtMAC6.Text);
if (intRet > 0)
MessageBox.Show("更改失敗");