2024年3月27日发(作者:)

2、C#编程要点

Microsoft提供的WMI(Windows Management Instrumentation)中提供了一个

Win32_NetworkAdapterConfiguration的类,定义了获取MAC地址的方法,因此只要

构造一个定义为Win32_NetworkAdapter Configuration的WMI类,从中取出MAC地

址的值即可。在C#中管理WMI主要使用ManagementClass类。编写程序过程要注意以

下两个要点。

1)、命名空间的添加

由于ment的动态链接库不是C#中默认加载的,所以要添加

ment的命名空间前要添加链接库。依次选择:

“项目”→“添加引用”→“.NET”菜单栏,加入ment。确认添加了动

态链接库后添加命名空间:

using ment;

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”)

ine(”MAC address”+mo[“MacAddress”].ToString());

}

using System;

using c;

using ;

using ;

using ;

using ment;

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=tances();

//取得ManagementObjectCollection中的不同网卡配置信息,判断如果该网卡可用

就//去读取MAC地址

foreach(ManagementObject mo in moc)

{

if (mo["IPEnabled"].ToString() == "True")

ine("MAC address" +

mo["MacAddress"].ToString());

ne();

}

}

}

}