`
lovecontry
  • 浏览: 1095069 次
文章分类
社区版块
存档分类
最新评论

用C#操作类读写WinCE平台Mac地址

 
阅读更多

前段时间在测试我们触摸屏联网性能的时候,由于屏的Mac地址通过注册表设置,而PB定制WinCE内核的时候就有一个默认值,所以一批下来Mac地址都一样,两台以上的机器一联网准出问题,通过注册表软件去修改Mac地址太麻烦了,所以做了一个小的Mac地址软件。

以前用VB做了一个注册表操作类(参见我的blog:http://blog.csdn.net/yefanqiu/archive/2004/07/13/40379.aspx),功能比较详尽;现在用C#做了一个注册表操作类也别简单的只做数据读写了,索性也做个全功能的了。由于.Net在域名空间Microsoft.Win32中提供RegistryKey类,操作注册表还是比较方便的,唯感不足的时在操作多级子键的时候不很便捷,所以在封装注册表操作类的时候也把这部分内容给考虑进去了。
注册表操作类代码(可以用在.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;
try
{
if (SubKey.Length > 0)
{
string[] strSubKey = SubKey.Split('//');
foreach (string strKeyName in strSubKey)
{
subKey = subKey.OpenSubKey(strKeyName);
}
}
RegistryValueKind valueType = subKey.GetValueKind(ValueName);
subKey.Close();
return valueType;
}
catch
{
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)
{
RegistryKey subKey = reg[(int)Root];
if (ValueName.Length == 0) return 2;
try
{
if (SubKey.Length > 0)
{
string[] strSubKey = SubKey.Split('//');
foreach (string strKeyName in strSubKey)
{
subKey = subKey.CreateSubKey(strKeyName);
}
}
subKey.SetValue(ValueName, ValueData, ValueType);
subKey.Close();
return 0;
}
catch
{
return 1;
}
}
//删除指定变量
public int DeleteValue(HKEY Root, string SubKey, string ValueName)
{
RegistryKey subKey = reg[(int)Root];
try
{
if (SubKey.Length > 0)
{
string[] strSubKey = SubKey.Split('//');
foreach (string strKeyName in strSubKey)
{
subKey = subKey.OpenSubKey(strKeyName,true);
}
}
subKey.DeleteValue(ValueName, true);
subKey.Close();
return 0;
}
catch
{
return 1;
}
}
//创建指定的键
public int CreateKey(HKEY Root, string SubKey, string KeyName)
{
RegistryKey subKey = reg[(int)Root];
if (KeyName.Length == 0) return 2;
try
{
if (SubKey.Length > 0)
{
string[] strSubKey = SubKey.Split('//');
foreach (string strKeyName in strSubKey)
{
subKey = subKey.CreateSubKey(strKeyName);
}
}
subKey.CreateSubKey(KeyName);
subKey.Close();
return 0;
}
catch
{
return 1;
}
}
//删除指定的键
public int DeleteKey(HKEY Root, string SubKey, string KeyName)
{
RegistryKey subKey = reg[(int)Root];
try
{
if (SubKey.Length > 0)
{
string[] strSubKey = SubKey.Split('//');
foreach (string strKeyName in strSubKey)
{
subKey = subKey.OpenSubKey(strKeyName, true);
}
}
subKey.DeleteSubKeyTree(KeyName);
subKey.Close();
return 0;
}
catch
{
return 1;
}
}
//判断指定的键是否存在
public int IsExistKey(HKEY Root, string SubKey, string KeyName)
{
RegistryKey subKey = reg[(int)Root];
try
{
if (SubKey.Length > 0)
{
string[] strSubKey = SubKey.Split('//');
foreach (string strKeyName in strSubKey)
{
subKey = subKey.OpenSubKey(strKeyName);
}
}
string[] strSubKey1 = subKey.GetSubKeyNames();
foreach (string strKeyName in strSubKey1)
{
if (strKeyName == KeyName) return 0;
}
return 1;
}
catch
{
return 2;
}
}
//枚举指定的键的子键
public string[] EnumKeyName(HKEY Root, string SubKey)
{
RegistryKey subKey = reg[(int)Root];
if (SubKey.Length == 0) return null;
try
{
string[] strSubKey = SubKey.Split('//');
foreach (string strKeyName in strSubKey)
{
subKey = subKey.OpenSubKey(strKeyName);
}
string[] strKey = subKey.GetSubKeyNames();
subKey.Close();
return strKey;
}
catch
{
return null;
}
}
//枚举指定的键的值
public string[] EnumValueName(HKEY Root, string SubKey)
{
RegistryKey subKey = reg[(int)Root];
if (SubKey.Length == 0) return null;
try
{
string[] strSubKey = SubKey.Split('//');
foreach (string strKeyName in strSubKey)
{
subKey = subKey.OpenSubKey(strKeyName);
}
string[] strValue = subKey.GetValueNames();
subKey.Close();
return strValue;
}
catch
{
return null;
}
}
}
类出来了,用它读写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("更改失败");
}
}
分享到:
评论

相关推荐

    C# wince xml读写

    以下是在Wince环境下,使用C#进行XML读写的步骤: 1. **读取XML**: - 加载XML文件:使用`XmlDocument`类的`Load`方法加载XML文件到内存中,例如: ```csharp XmlDocument doc = new XmlDocument(); doc.Load(...

    C# wince下串口读写程序适合初学者

    对于初学者来说,理解并实现C#在Windows CE(wince)平台下的串口读写程序是迈向物联网和嵌入式系统开发的重要一步。这个项目以读取GPS数据为例,让我们深入探讨相关知识点。 首先,我们要了解**Windows CE**。...

    Wince5下C#读写I2C-EEPROM

    在Windows CE 5.0(简称Wince5)操作系统中,开发嵌入式应用程序时,有时需要与硬件设备进行直接交互,例如通过I2C总线读写EEPROM(电可擦可编程只读存储器)。本文将详细介绍如何使用C#语言在Wince5环境下实现这一...

    RFID开发-WinCE操作-C#

    在RFID(无线频率识别)开发领域,WinCE操作系统与C#编程语言的结合为移动设备应用提供了强大的支持。RFID技术主要用于自动化数据采集,它通过无线电信号识别特定目标并读取或写入相关数据,广泛应用于物流、仓储、...

    C#编写的wince串口程序

    在嵌入式系统开发中,Windows Embedded Compact(简称WinCE)是一个广泛使用的操作系统平台,尤其适用于工业设备、医疗仪器和移动设备等。C#作为.NET框架下的主要编程语言,以其简洁易读的语法和强大的功能深受...

    wince PWM C#的程序

    总的来说,编写一个在Wince平台上用C#控制PWM驱动蜂鸣器的程序,需要对嵌入式系统、C#编程、WinCE API以及S3C2440硬件有一定了解。这个过程既包含了软件开发,也涵盖了硬件交互,是嵌入式开发中的典型任务。

    C# WinCE5.0 访问SDF数据库

    本文将深入探讨如何在WinCE5.0平台上,使用C#语言访问和操作SDF数据库。 SDF数据库是微软提供的一种嵌入式数据库系统,它不需要单独的服务器进程,适合于资源有限的设备如PDA(个人数字助理)。在WinCE5.0上,C#...

    c# wince 配置文件

    在C#编程环境中,Windows CE(WinCE)是一种嵌入式操作系统,广泛应用于移动设备和手持设备。在WinCE平台上开发应用程序时,配置文件扮演着重要角色,它们用于存储应用程序的设置、偏好或其他非代码数据,以便在运行...

    wince下xml文件操作(c#)

    在Windows CE(wince)平台上,使用C#进行XML文件的操作可能会遇到一些与桌面系统不同的问题。本篇文章将深入探讨如何在wince环境下利用C#有效地处理XML文件,包括读取、写入、修改和删除XML文件的关键知识点。 ...

    net c# 读写XML 操作

    本文将详细介绍如何使用C#进行XML文件的基本读写操作,并演示如何进行XML文档的修改与删除。 #### 一、XML 文件读取 在C#中读取XML文件通常涉及到`System.Xml`命名空间中的类。以下是一个简单的示例: ```csharp ...

    TPC.rar_ TCPClient_Server_Wince C# TCP_wince_wince tcpserver

    标题中的"TPC.rar_ TCPClient_Server_Wince C# TCP_wince_wince tcpserver"暗示了我们有两个关键组件:TCPClient和TCPServer,它们都是用C#语言编写的,并且是专为WINCE环境设计的。C#是一种现代化的、类型安全的...

    wince下的C#读取xml文件

    在Windows CE(简称Wince)环境下,开发C#应用程序时,由于系统特性的限制,一些在桌面版.NET Framework中常用的功能可能无法直接使用。比如,Wince不支持相对路径,这意味着不能像在桌面系统上那样方便地使用`...

    C# WINCE下串口调试工具源代码

    在IT领域,尤其是在嵌入式系统开发中,Windows CE(简称WINCE)是一个常见的操作系统平台。这个操作系统被广泛应用于各种设备,如手持设备、工业控制设备等。在这些设备上,串口通信扮演着至关重要的角色,因为它...

    wince下 c#串口通信

    在Windows CE(简称WinCE)操作系统环境下,C#语言提供了丰富的功能来实现串口通信,这对于嵌入式设备和物联网应用来说尤为重要。本篇将详细探讨如何在WinCE下使用C#进行串口通信,以及可能遇到的问题和解决策略。 ...

    使用C#实现WINCE系统下的ADS通讯_ads_beckhoff_c#_compact framework

    在本文中,我们将深入探讨如何在Windows Embedded CE (WinCE)操作系统下,使用C#语言和.NET Compact Framework实现Automation Device Specification (ADS)通信。ADS是由Beckhoff公司开发的一种通讯协议,广泛应用于...

    wince下用c#语言编写的sqlite程序demo

    在提供的DEMO程序SQtest中,可能包含了以上步骤的实际应用,展示了如何在WinCE设备上用C#操作SQLite数据库。通过查看和运行DEMO,你可以更深入地理解如何在实际项目中集成SQLite。 总之,在WinCE系统上,C#和SQLite...

    c#编写的wince6串口及数据库操作程序

    在C#中,可以使用`System.IO.Ports`命名空间下的`SerialPort`类来实现串口的读写操作。开发者需要设置串口参数(如波特率、数据位、停止位和校验位),并实现数据发送和接收的事件处理。 4. **SQL Server Compact ...

    wince c# 打开 关闭 进程

    在Windows CE (Wince)平台上,使用C#进行进程管理是一项常见的任务,这涉及到打开、关闭以及遍历系统中的进程。在Wince中,由于.NET Micro Framework (NETMF)的限制,不能直接使用.NET框架提供的System.Diagnostics....

    wince6下的json操作

    1. `JsonHelper.cs` - 这个文件可能包含了自定义的JSON操作类,如解析和生成JSON字符串的辅助方法。 2. `Json.csproj` - 这是Visual Studio的项目文件,用于构建和管理JSON相关的代码。 3. `CodeBetter.Json.sln` 和...

    使用C#实现WINCE系统下的ADS通讯 (TC2)-20210317.zip

    在本文中,我们将深入探讨如何使用C#编程语言在Windows Embedded Compact (WINCE)系统上实现与Automation Device Specification (ADS)的通信。ADS是Beckhoff公司开发的一种通信协议,常用于工业自动化环境中,使...

Global site tag (gtag.js) - Google Analytics