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。
完整实例:
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 );
}
///获取cpu序列号
///</summary>
///<returns> string </returns>
public string GetCpuInfo()
{
string strID = "";
try
{
ManagementClass mc = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
strID = mo.Properties["ProcessorId"].Value.ToString();
break;
}
}
catch (Exception ex)
{
throw new Exception("WMI:GetCpuInfo" + ex.ToString() + ex.Data.ToString()+ ex.HelpLink.ToString());
}
return strID;
}
/// <summary>
/// 获取主板的编号
/// </summary>
/// <returns></returns>
public string GetMainBoardID()
{
ManagementClass mc = new ManagementClass("Win32_BaseBoard");
ManagementObjectCollection moc = mc.GetInstances();
string strID = null;
foreach (ManagementObject mo in moc)
{
strID = mo.Properties["SerialNumber"].Value.ToString();
break;
}
return strID;
}
/// <summary>
/// 获取BIOS编号
/// </summary>
/// <returns></returns>
public string GetBiosID()
{
ManagementClass mc = new ManagementClass("Win32_BIOS");
ManagementObjectCollection moc = mc.GetInstances();
string strID = null;
foreach (ManagementObject mo in moc)
{
strID = mo.Properties["SerialNumber"].Value.ToString();
break;
}
return strID;
}
///<summary>
/// 获取硬盘ID
///</summary>
///<returns> string </returns>
public string GetHDid()
{
//ManagementClass mc = new ManagementClass("Win32_PhysicalMedia");
网上有提到,用Win32_DiskDrive,但是用Win32_DiskDrive获得的硬盘信息中并不包含SerialNumber属性。
//ManagementObjectCollection moc = mc.GetInstances();
//string strID = null;
//foreach (ManagementObject mo in moc)
//{
// strID = mo.Properties["SerialNumber"].Value.ToString();
// break;
//}
//return strID;
const int MAX_FILENAME_LEN = 256;
int retVal = 0;
GetVolumeInformation("c:\\",null,MAX_FILENAME_LEN,ref retVal,0,0,null,MAX_FILENAME_LEN);
return retVal.ToString("X");
}
///<summary>
/// 获取网卡硬件地址
///</summary>
///<returns> string </returns>
public string GetMacAddress()
{
string MoAddress = "0000000000";
using (ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"))
{
ManagementObjectCollection moc2 = mc.GetInstances();
foreach (ManagementObject mo in moc2)
{
if ((bool)mo["IPEnabled"] == true)
{
MoAddress = mo["MacAddress"].ToString();
MoAddress = MoAddress.Replace(":", "");
}
mo.Dispose();
}
}
//NetworkInterface[] ntif = NetworkInterface.GetAllNetworkInterfaces();
//if (ntif.Length > 0)
//{
// string temp = ntif[0].GetPhysicalAddress().ToString();
//}
return MoAddress.ToString();
}