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();
}