注册表修改方法:
由给定的键值更改
private const string NETWORKADDRESS_KEY = @"SYSTEM/CurrentControlSet/Control/Class/{4D36E972- E325-11CE-BFC1-08002bE10318}/0001";//网卡在键值1所在的位置
private const string NETWORKADDRESS_NAME = "NetworkAddress";
public string ReadMac()
{
RegistryKey HKLM = Registry.LocalMachine;
try
{
RegistryKey Reg = HKLM.OpenSubKey(NETWORKADDRESS_KEY);
object o = Reg.GetValue(NETWORKADDRESS_NAME);
return o.ToString();
}
catch
{
return string.Empty;
}
}
public void SetMac(string mac)
{
RegistryKey HKLM = Registry.LocalMachine;
RegistryKey Reg = HKLM.OpenSubKey(NETWORKADDRESS_KEY, true);
Reg.SetValue(NETWORKADDRESS_NAME, mac);
}
public void SetNetworkAddress(string networkaddress)
{
List<string> netAddressName = this.GetAllNetworkAdapter();
chagneNetWorkAdapterMac(networkaddress, netAddressName[0]);
}
如有多块网卡,则寻第一块并设Mac值
/// <summary>
/// 网卡地址,网卡名称
/// </summary>
/// <param name="NetworkMac"></param>
/// <param name="NetworkAdapterName"></param>
public void chagneNetWorkAdapterMac(string NetworkMac, string NetworkAdapterName)
{
//打开注册表
RegistryKey rk = Registry.LocalMachine;
string caption = "";//网卡标志
//MessageBox.Show(NetworkAdapterName);
string NetMac = NetworkMac;
string nowNetWork = NetworkAdapterName;
//HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002bE10318}
string subKeyPath = @"SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002bE10318}/";
RegistryKey rsKey = null;
string allKeyPath = null;
for (int i = 0; i <= 20; i++)
{
allKeyPath = subKeyPath + "000" + i.ToString();
rsKey = rk.OpenSubKey(allKeyPath, true);
MessageBox.Show(rsKey.ToString());
if (rsKey.SubKeyCount < 2)//里面的键值个数多于1
continue;
if (null != rsKey)
{
caption = rsKey.GetValue("DriverDesc").ToString();
if (nowNetWork.IndexOf(caption) > -1)
{
rsKey.SetValue("NetworkAddress", NetMac);
MessageBox.Show(NetMac.ToString()+"Mac修改成功");
break;
}
}
}
}
/// <summary>
/// 得到IP属性的名称
/// </summary>
/// <returns></returns>
public List<string> GetAllNetworkAdapter()
{
List<string> allNetworkAdapte = new List<string>();
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"] == true)
allNetworkAdapte.Add(mo["Caption"].ToString());//5-1-a-s-p-x
}
return allNetworkAdapte;
}