C# Management 類獲取本機各種信息

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。

 

完整實例:

複製代碼
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);
   }
 ///獲取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();
        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章