天天看點

用C#操作類讀寫WinCE平台Mac位址

         前段時間在測試我們觸摸屏聯網性能的時候,由于屏的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("更改失敗");