前段时间在测试我们触摸屏联网性能的时候,由于屏的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;
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("更改失败");
}
}
分享到:
相关推荐
对于Excel、word等office组件的操作,可以借鉴以前的VBA。 另外,如果不太清楚你需要的操作所对应的方法和属性,可以在office组件中开启宏录制,进行测试操作后,再编辑宏,就能在宏代码中找到自己需要的内容。
C# 编写的操作Excel读取/写入动态库(COM/NPOI两种方式),个人推荐使用NPOI方式,因为COM方式存在无法关闭Excel进程的情况(个人体验COM方式效率有点低)。。。已设置0分,资源自取。
讲解了 Missing参数的用法,读(取)DataTable和DateSet里面 简单化 我用了3个小函数说明一切
C#操作excel 打开-读取-修改-保存 winform入门操作 适合入门读者
C#对三菱和西门子,欧姆龙等支持Modbus的服务器进行读写,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 1)附件C#代码全开源,所有代码公开,不使用第三方组件。...
C#操作ACCESS数据库,MDB文件读写
使用一个开源的技术来读写欧姆龙PLC数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 1)附件C#代码全开源,所有代码公开,...
WinCE6.0 C# 操作Wince上传下载文件类
c# 读写 Excel 代码 PrintGiftVolume.rar
C#操作Excel的几种方法
我只好尝试用C#操作EXCEL类,将DATAVIEW的数据写入EXCEL,然后再生成柱状图,花了2天时间找资料,现在可以生成图了,但是生成的图不好看,细节上无法控制。 我把生成图的代码贴下,我再附上XML方式出EXCEL的代码,...
用C#读写Excel文件,详细介绍了#读写Excel文件的各种操作的代码;
C#的,winform的,这是我自己写的一个c#操作excel的例子,其中包括数据操作,字体,格式,单元格等操作,还有一个生成柱状图的方法,所有的方法都在ExcelHelper.cs类里,点击Form1窗体里的按钮可以看到各种操作的...
C# XML文件读写操作源码,以及如何调用,注释详解,有任何问题请留言, 以下截取xml文件和部分调用代码段: * ++++++++++++++++++++++++++++++++++++++ <?xml version="1.0" encoding="utf-8" standalone="no"?&...
C#Json文件读写修改类附带操作程序,操作类详细丰富稳定,包含Json文件读取,写入,单项修改等内容。
C#将DATASET、DATATABLE数据汇出EXCEL,从EXCEL汇入DATASET、DATATABLE,采用线程操作中途可以取消。而且速度非常快,比Cells直接赋值的方法不知快了多少倍。
c#操作excel的类 对excel进行基本操作,适合初学者
实现C#读写Excel和Word文件基本操作,可以读写Word文件和读出Excel中的数据并实现Excel与数据库的导入与导出
C#对excel的操作C#对excel的操作C#对excel的操作C#对excel的操作C#对excel的操作C#对excel的操作C#对excel的操作C#对excel的操作C#对excel的操作C#对excel的操作
C#操作Excel的方法