1. 添加
System.Management 的引用
2. 在cs代码中初始化引用
ManagementClass mc = new ManagementClass("引用的WMI库名称");
可供引用的WMI类库在MSDN中可查到:
http://msdn.microsoft.com/en-us/library/aa394084(v=VS.85).aspx
3. 获取WMI实例
ManagementObjectCollection moc= vNetworkAdapter.GetInstances();
这里获取到的是WMI实例集合,例如,获取网络适配器信息,这里会获取到无线连接、有线连接、1394连接等与网络连接有关的实例集合。
4. 循环个实例获取其属性
foreach (ManagementObject mo in moc)
{
//TODO: 获取各实例属性
//实例各属性、方法、解释也可在http://msdn.microsoft.com/en-us/library/aa394084(v=VS.85).aspx里查到
}
5. 修改
修改需要用到 ManagementObject.InvokeMethod(MethodName, ManagementBaseObject, InvokeMethodOptions ); 方法
MethodName 为要执行的方法名称的,也可在上面MSDN的链接中查到;
ManagementBaseObject 不好解释,官方解释为“包含管理对象的基本元素。用作管理更具体的管理对象类的基类。”
InvokeMethodOptions 执行附加选项,可以为NULL。
完整实例:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
//如果没有启用IP设置的网络设备则跳过
if (!(bool)mo["IPEnabled"])
continue;
// 获取属性
string caption = mo["Caption"].ToString(); //名称
string[] addresses = (string[])mo["IPAddress"]; //IP地址
string[] subnets = (string[])mo["IPSubnet"]; //子网掩码
string[] gateways = (string[])mo["DefaultIPGateway"]; //网关
string[] dnses = (string[])mo["DNSServerSearchOrder"]; //DNS
ManagementBaseObject newIP;
// 修改IP及子网掩码
newIP = mo.GetMethodParameters("EnableStatic");
newIP["IPAddress"] = new string[] { "192.168.2.51" };
newIP["SubnetMask"] = new string[] { "255.255.255.0" }; //修改IP同时,需要填写子网掩码
mo.InvokeMethod("EnableStatic", newIP, null);
// 设置网关地址
newIP = mo.GetMethodParameters("SetGateways");
newIP["DefaultIPGateway"] = new string[] { "192.168.2.1" };
mo.InvokeMethod("SetGateways", newIP, null);
// 设置DNS
newIP = mo.GetMethodParameters("SetDNSServerSearchOrder");
newIP["DNSServerSearchOrder"] = new string[] { "192.168.1.10" };
mo.InvokeMethod("SetDNSServerSearchOrder", newIP, null);
}