获取计算机中的硬件信息
生活随笔
收集整理的這篇文章主要介紹了
获取计算机中的硬件信息
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在項目開發過程中,經常會需要讀取所在計算機的硬件信息,包括CPU的序列號,主板的序列號,硬盤的序列號,MAC地址,IP地址,用戶名,系統類型,計算機名稱,操作系統類型,物理內存大小,BIOS內容等。
開發環境:VS2005 ? .NET2.0
項目工程文件:Computer.zip??
/*****************************************************************/ /* 作者:虞曉杰* Emial:fishyxj@sina.com* 2011.9.26* 功能:用于獲取計算機的各種信息,包括CPU的ID,MAC地址,硬盤ID,* IP地址登錄用戶名,計算機名稱,系統類型,物理內存,主板的ID,* BIOS的ID* * 缺陷:當計算機存在虛擬網卡時,無法區分虛擬網卡與真實網卡,因此* 讀取MAC地址時,會存在不穩定的情況。需要自行處理虛擬網卡MAC的情* 況 /*****************************************************************/using System; using System.Collections.Generic; using System.Text; using System.Management; using System.Collections; using System.Net.NetworkInformation; using Microsoft.Win32;namespace XFish.Utils {/// <summary>/// 計算機信息類/// </summary>public class Computer{#region 類內部變量private string _CpuID;private string _MacAddress;private ArrayList _MacAddList;private string _DiskID;private string _IpAddress;private string _LoginUserName;private string _ComputerName;private string _SystemType;private string _TotalPhysicalMemory; //單位:M private string _BaseboardID;private string _BiosID;private static Computer _instance;#endregion#region 類屬性/// <summary>/// 獲取計算機信息全局實例/// </summary>/// <returns>Computer實例</returns>public static Computer Instance(){if (_instance == null)_instance = new Computer();return _instance;}/// <summary>/// 獲取CPU的ID/// </summary>public string CpuID{get { return _CpuID; }}/// <summary>/// 獲取MAC地址/// </summary>public string MacAddress{get { return _MacAddress; }}/// <summary>/// 獲取計算機中的MAC地址列表,當存在多個網卡時(包括虛擬網卡)/// </summary>public ArrayList MacAddList{get { return _MacAddList; }}/// <summary>/// 獲取硬盤ID/// </summary>public string DiskID{get { return _DiskID; }}/// <summary>/// 獲取IP地址(活躍的網卡)/// </summary>public string IpAddress{get { return _IpAddress; }}/// <summary>/// 系統登錄用戶名/// </summary>public string LoginUserName{get { return _LoginUserName; }}/// <summary>/// 計算機名稱/// </summary>public string ComputerName{get { return _ComputerName; }}/// <summary>/// 操作系統類型/// </summary>public string SystemType{get { return _SystemType; }}/// <summary>/// 總的物理內存/// </summary>public string TotalPhysicalMemory{get { return _TotalPhysicalMemory; }}/// <summary>/// 主板ID/// </summary>public string BaseboardID{get { return _BaseboardID; }}/// <summary>/// BIOS的ID/// </summary>public string BiosID{get { return _BiosID; }}#endregion #region 類初始化public Computer(){_CpuID = GetCpuID();_MacAddress = GetMacAddress();_MacAddList = GetMacAddList();_DiskID = GetDiskID();_IpAddress = GetIPAddress();_LoginUserName = GetUserName();_SystemType = GetSystemType();_TotalPhysicalMemory = GetTotalPhysicalMemory();_ComputerName = GetComputerName();_BaseboardID = GetBaseBoardID();_BiosID = GetBiosID();}#endregion#region 類方法/// <summary>/// 獲取BIOS序列號/// </summary>/// <returns></returns>private string GetBiosID(){try{//方法一//SelectQuery Query = new SelectQuery("SELECT * FROM Win32_BaseBoard");//ManagementObjectSearcher driveID = new ManagementObjectSearcher(Query);//ManagementObjectCollection.ManagementObjectEnumerator data = driveID.Get().GetEnumerator();//data.MoveNext();//ManagementBaseObject board = data.Current;//return board.GetPropertyValue("SerialNumber").ToString();//方法二System.Management.ManagementObjectSearcher cmicWmi = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS");string biosid = string.Empty;ManagementObjectCollection moc = cmicWmi.Get();foreach (ManagementObject cmicWmiObj in moc){biosid = cmicWmiObj["SerialNumber"].ToString();}return biosid;//System.Management.ManagementObjectSearcher cmicWmi = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS");//string biosid = string.Empty;//ManagementObjectCollection moc = cmicWmi.Get();//foreach (ManagementObject cmicWmiObj in moc)//{// biosid += GetAllInfo(cmicWmiObj);//}//return biosid;}catch(Exception ex){//throw new Exception("unknow:"+ex.Message);return "unknow";}finally{}}/// <summary>/// 獲取CPU序列號/// </summary>/// <returns></returns>private string GetCpuID(){try{//獲取CPU序列號代碼 string cpuInfo = "";//cpu序列號 ManagementClass mc = new ManagementClass("Win32_Processor");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){cpuInfo = mo.Properties["ProcessorId"].Value.ToString();}moc = null;mc = null;return cpuInfo;//string cpuInfo = "";//cpu序列號 //ManagementClass mc = new ManagementClass("Win32_Processor");//ManagementObjectCollection moc = mc.GetInstances();//foreach (ManagementObject mo in moc)//{// cpuInfo += GetAllInfo(mo);//}//moc = null;//mc = null;//return cpuInfo;}catch (Exception ex){return "unknow";}finally{}}/// <summary>/// 獲取MAC地址列表/// </summary>/// <returns></returns>private ArrayList GetMacAddList(){try{ArrayList maclist = new ArrayList();ArrayList warelessMacList = new ArrayList();NetworkInterface[] fNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces();foreach (NetworkInterface adapter in fNetworkInterfaces){string fRegistryKey = "SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\" + adapter.Id + "\\Connection";RegistryKey rk = Registry.LocalMachine.OpenSubKey(fRegistryKey, false);if (rk != null){// 區分 PnpInstanceID // 如果前面有 PCI 就是本機的真實網卡 // MediaSubType 為 01 則是常見網卡,02為無線網卡。 string fPnpInstanceID = rk.GetValue("PnpInstanceID", "").ToString();int fMediaSubType = Convert.ToInt32(rk.GetValue("MediaSubType", 0));if (fPnpInstanceID.Length > 3 &&fPnpInstanceID.Substring(0, 3) == "PCI"){string mac = adapter.GetPhysicalAddress().ToString();mac = GetMacStr(mac);maclist.Add(mac);}else if (fMediaSubType == 1)continue;else if (fMediaSubType == 2){string mac = adapter.GetPhysicalAddress().ToString();mac = GetMacStr(mac);warelessMacList.Add(mac);}}}maclist.AddRange(warelessMacList);return maclist;}catch{try{ArrayList maclist = new ArrayList();ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){if (mo["MacAddress"] != null){string mac = mo["MacAddress"].ToString();maclist.Add(mac);}}moc = null;mc = null;return maclist;}catch{return null;}}}/// <summary>/// 獲取MAC地址/// </summary>/// <returns></returns>private string GetMacAddress(){try{string warelessMac = string.Empty;string mac = string.Empty;NetworkInterface[] fNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces();foreach (NetworkInterface adapter in fNetworkInterfaces){string fRegistryKey = "SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\" + adapter.Id + "\\Connection";RegistryKey rk = Registry.LocalMachine.OpenSubKey(fRegistryKey, false);if (rk != null){// 區分 PnpInstanceID // 如果前面有 PCI 就是本機的真實網卡 // MediaSubType 為 01 則是常見網卡,02為無線網卡。 string fPnpInstanceID = rk.GetValue("PnpInstanceID", "").ToString();int fMediaSubType = Convert.ToInt32(rk.GetValue("MediaSubType", 0));if (fPnpInstanceID.Length > 3 &&fPnpInstanceID.Substring(0, 3) == "PCI"){mac = adapter.GetPhysicalAddress().ToString();break;}else if (fMediaSubType == 1)continue;else if (fMediaSubType == 2)warelessMac = adapter.GetPhysicalAddress().ToString();} }if (!mac.Equals(string.Empty))return GetMacStr(mac);else if (!warelessMac.Equals(string.Empty))return GetMacStr(warelessMac);elsereturn "unknow";}catch (Exception ex){return "unknow";}finally{}}/// <summary>/// 獲取MAC地址/// </summary>/// <param name="mac"></param>/// <returns></returns>private string GetMacStr(string mac){string newmac = string.Empty;newmac = mac.Substring(0, 2);mac = mac.Substring(2, mac.Length - 2);while (!mac.Equals(string.Empty)){newmac += ":";newmac += mac.Substring(0, 2);mac = mac.Substring(2, mac.Length - 2);}return newmac;}/// <summary>/// 獲取IP地址/// </summary>/// <returns></returns>private string GetIPAddress(){try{//獲取IP地址 string st = "";ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){if ((bool)mo["IPEnabled"] == true){//st=mo["IpAddress"].ToString(); System.Array ar;ar = (System.Array)(mo.Properties["IpAddress"].Value);st = ar.GetValue(0).ToString();break;}}moc = null;mc = null;return st;}catch (Exception ex){return "unknow";}}/// <summary>/// 獲取硬盤的序列號/// </summary>/// <returns></returns>private string GetDiskID(){try{//方法一//ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");//String strHardDiskID = null;//foreach (ManagementObject mo in searcher.Get())//{// strHardDiskID = mo["SerialNumber"].ToString().Trim();// break;//}//return strHardDiskID; //方法二//System.Management.ManagementObjectSearcher cmicWmi = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");//string diskid = string.Empty;//foreach (ManagementObject cmicWmiObj in cmicWmi.Get())//{// diskid = cmicWmiObj["signature"].ToString();//}//return diskid;//方法三 //String HDid = "";//ManagementClass mc = new ManagementClass("Win32_DiskDrive");//ManagementObjectCollection moc = mc.GetInstances();//foreach (ManagementObject mo in moc)//{// HDid = (string)mo.Properties["model"].Value;//}//moc = null;//mc = null;//return HDid;//方法四System.Management.ManagementObjectSearcher cmicWmi = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");string tmp = string.Empty;foreach (ManagementObject cmicWmiObj in cmicWmi.Get()){bool isSyspan = false;System.Management.PropertyDataCollection pdc = cmicWmiObj.Properties;string info = string.Empty;foreach (PropertyData pd in pdc){if (pd.Name.Equals("Name")){if (pd.Value.Equals("\\\\.\\PHYSICALDRIVE0")){isSyspan = true;}}if (isSyspan){if (pd.Name.Equals("PNPDeviceID")){tmp += pd.Value;}else if (pd.Name.Equals("Signature")){tmp += pd.Value;break;}}}}return tmp;}catch (Exception ex){return "unknow";}finally{}}/// <summary> /// 操作系統的登錄用戶名 /// </summary> /// <returns></returns> private string GetUserName(){try{string st = "";ManagementClass mc = new ManagementClass("Win32_ComputerSystem");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){st = mo["UserName"].ToString();}moc = null;mc = null;return st;}catch (Exception ex){return "unknow";}finally{}}/// <summary> /// 獲取計算機操作系統類型 /// </summary> /// <returns></returns> private string GetSystemType(){try{string st = "";ManagementClass mc = new ManagementClass("Win32_ComputerSystem");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){st = mo["SystemType"].ToString();}moc = null;mc = null;return st;}catch (Exception ex){return "unknow";}finally{}}/// <summary> /// 獲取計算機物理內存 /// </summary> /// <returns></returns> private string GetTotalPhysicalMemory(){try{string st = "";ManagementClass mc = new ManagementClass("Win32_ComputerSystem");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){st = mo["TotalPhysicalMemory"].ToString();}moc = null;mc = null;return st;}catch (Exception ex){return "unknow";}finally{}}/// <summary>/// 獲取主板的ID/// </summary>/// <returns></returns>private string GetBaseBoardID(){try{//string strbNumber = string.Empty;//ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_baseboard");//foreach (ManagementObject mo in mos.Get())//{// strbNumber = mo["SerialNumber"].ToString();// break;//}//return strbNumber;ManagementClass mc = new ManagementClass("WIN32_BaseBoard");ManagementObjectCollection moc = mc.GetInstances();string SerialNumber = "";foreach (ManagementObject mo in moc){SerialNumber = mo["SerialNumber"].ToString();break;}return SerialNumber;//ManagementClass mc = new ManagementClass("WIN32_BaseBoard");//ManagementObjectCollection moc = mc.GetInstances();//string SerialNumber = "";//foreach (ManagementObject mo in moc)//{// SerialNumber = GetAllInfo(mo);//}//return SerialNumber;}catch (Exception ex){return "unknow";}finally{}}/// <summary>/// 獲取計算機名稱/// </summary>/// <returns></returns>private string GetComputerName(){try{return System.Environment.GetEnvironmentVariable("ComputerName");}catch(Exception ex){return "unknow";}finally{}}#endregion} }
轉載于:https://www.cnblogs.com/fishyxj/archive/2011/09/26/2192418.html
總結
以上是生活随笔為你收集整理的获取计算机中的硬件信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTTP 错误 500.19 - Int
- 下一篇: MSSQL表分区的创建