2、C#编程要点
Microsoft提供的WMI(Windows Management Instrumentation)中提供了一个Win32_NetworkAdapterConfiguration的类,定义了获取MAC地址的方法,因此只要构造一个定义为Win32_NetworkAdapter Configuration的WMI类,从中取出MAC地址的值即可。
在C#中管理WMI主要使用ManagementClass类。
编写程序过程要注意以下两个要点。
1)、命名空间的添加
由于System.Management的动态链接库不是C#中默认加载的,所以要添加System.Management的命名空间前要添加System.Management.dll链接库。
依次选择:“项目”→“添加引用”→“.NET”菜单栏,加入System.Management。
确认添加了动态链接库后添加命名空间:
using System.Management;
2)、MAC地址的获取
根据前面的介绍,要构造一个ManagementClass类管理定义为Win32_NetworkAdapter Configuration的WMI类,然后将ManagementClass类中的所有变量的值返回给属于ManagementObjectCollection类的变量,ManagementObjectCollection类用于表示WMI实例的不同集合,将不同集合中的各个MAC地址读出,就可获得多网卡的MAC地址。
构造ManagementClass,函数原型如下:
public ManagementClass(string path);
参数:path表示WMI的路径。
要返回ManagementClass所有实例的集合,使用GetInstances(),函数原型如下:
public ManagementObjectCollection GetInstances();
例如:获得本机上多网卡的MAC地址:
ManagementClass mc; //定义一个ManagementClass类
//将ManagementClass类变量定义为Win32_NetworkAdapter Configuration,以便获得//网络信息
mc=new ManagementClass(” Win32_NetworkAdapterConfiguration”);
//使用ManagementObjectCollection记录mc中的所有信息,包括多个网卡信息
ManagementObjectCollection moc=mc. GetInstances();
//取得ManagementObjectCollection中的不同网卡配置信息,判断如果该网卡可用就//去读取MAC地址
foreach(ManagementObject mo in moc)
{ if(mo[“IPEnabled”].ToString()= =”True”)
Console.WriteLine(”MAC address”+mo[“MacAddress”].ToString());
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Management;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
ManagementClass mc; //定义一个ManagementClass类
//将ManagementClass类变量定义为Win32_NetworkAdapter Configuration,以便获得//网络信息
mc=new ManagementClass(" Win32_NetworkAdapterConfiguration");
//使用ManagementObjectCollection记录mc中的所有信息,包括多个网卡信息
ManagementObjectCollection moc=mc.GetInstances();
//取得ManagementObjectCollection中的不同网卡配置信息,判断如果该网卡可用就//去读取MAC地址
foreach(ManagementObject mo in moc)
{
if (mo["IPEnabled"].ToString() == "True")
Console.WriteLine("MAC address" + mo["MacAddress"].ToString());
Console.ReadLine();
}
}
}
}。