我們在利用C#開發桌面程序(Winform)程序的時候,經常需要獲取一些跟系統相關的信息,例如用戶名、MAC地址、IP地址、硬盤ID、CPU序列號、系統名稱、物理內存等。
首先需要引入命名空間:
using System.Management;
/// 獲取本機用戶名、MAC地址、內網IP地址、公網IP地址、硬盤ID、CPU序列號、系統名稱、物理內存。
/// </summary>
public class GetSystemInfo
{
/// <summary>
/// 操作系統的登錄用戶名
/// </summary>
/// <returns>系統的登錄用戶名</returns>
public static string GetUserName()
{try{string strUserName = string.Empty;ManagementClass mc = new ManagementClass("Win32_ComputerSystem");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){strUserName = mo["UserName"].ToString();}moc = null;mc = null;return strUserName;}catch{return "unknown";}
}
/// <summary>
/// 獲取本機MAC地址
/// </summary>
/// <returns>本機MAC地址</returns>
public static string GetMacAddress()
{try{string strMac = string.Empty;ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){if ((bool)mo["IPEnabled"] == true){strMac = mo["MacAddress"].ToString();}}moc = null;mc = null;return strMac;}catch{return "unknown";}
}
/// <summary>
/// 獲取本機的物理地址
/// </summary>
/// <returns></returns>
public static string getMacAddr_Local()
{string madAddr = null;try{ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");ManagementObjectCollection moc2 = mc.GetInstances();foreach (ManagementObject mo in moc2){if (Convert.ToBoolean(mo["IPEnabled"]) == true){madAddr = mo["MacAddress"].ToString();madAddr = madAddr.Replace(':', '-');}mo.Dispose();}if (madAddr == null){return "unknown";}else{return madAddr;}}catch (Exception){return "unknown";}
}
/// <summary>
/// 獲取客戶端內網IPv6地址
/// </summary>
/// <returns>客戶端內網IPv6地址</returns>
public static string GetClientLocalIPv6Address()
{string strLocalIP = string.Empty;try{IPHostEntry ipHost = Dns.GetHostEntry(Dns.GetHostName());IPAddress ipAddress = ipHost.AddressList[0];strLocalIP = ipAddress.ToString();return strLocalIP;}catch{return "unknown";}
}
/// <summary>
/// 獲取客戶端內網IPv4地址
/// </summary>
/// <returns>客戶端內網IPv4地址</returns>
public static string GetClientLocalIPv4Address()
{string strLocalIP = string.Empty;try{IPHostEntry ipHost = Dns.Resolve(Dns.GetHostName());IPAddress ipAddress = ipHost.AddressList[0];strLocalIP = ipAddress.ToString();return strLocalIP;}catch{return "unknown";}
}
/// <summary>
/// 獲取客戶端內網IPv4地址集合
/// </summary>
/// <returns>返回客戶端內網IPv4地址集合</returns>
public static List<string> GetClientLocalIPv4AddressList()
{List<string> ipAddressList = new List<string>();try{IPHostEntry ipHost = Dns.Resolve(Dns.GetHostName());foreach (IPAddress ipAddress in ipHost.AddressList){if (!ipAddressList.Contains(ipAddress.ToString())){ipAddressList.Add(ipAddress.ToString());}}}catch{}return ipAddressList;
}/// <summary>
/// 獲取客戶端外網IP地址
/// </summary>
/// <returns>客戶端外網IP地址</returns>
public static string GetClientInternetIPAddress()
{string strInternetIPAddress = string.Empty;try{using (WebClient webClient = new WebClient()){strInternetIPAddress = webClient.DownloadString("http://www.coridc.com/ip");Regex r = new Regex("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}");Match mth = r.Match(strInternetIPAddress);if (!mth.Success){strInternetIPAddress = GetClientInternetIPAddress2();mth = r.Match(strInternetIPAddress);if (!mth.Success){strInternetIPAddress = "unknown";}}return strInternetIPAddress;}}catch{return "unknown";}
}
/// <summary>
/// 獲取本機公網IP地址
/// </summary>
/// <returns>本機公網IP地址</returns>
private static string GetClientInternetIPAddress2()
{string tempip = "";try{//http://iframe.ip138.com/ic.asp 返回的是:您的IP是:[220.231.17.99] 來自:北京市 光環新網WebRequest wr = WebRequest.Create("http://iframe.ip138.com/ic.asp");Stream s = wr.GetResponse().GetResponseStream();StreamReader sr = new StreamReader(s, Encoding.Default);string all = sr.ReadToEnd(); //讀取網站的數據int start = all.IndexOf("[") + 1;int end = all.IndexOf("]", start);tempip = all.Substring(start, end - start);sr.Close();s.Close();return tempip;}catch{return "unknown";}
}
/// <summary>
/// 獲取硬盤序號
/// </summary>
/// <returns>硬盤序號</returns>
public static string GetDiskID()
{try{string strDiskID = string.Empty;ManagementClass mc = new ManagementClass("Win32_DiskDrive");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){strDiskID = mo.Properties["Model"].Value.ToString();}moc = null;mc = null;return strDiskID;}catch{return "unknown";}
}
/// <summary>
/// 獲取CpuID
/// </summary>
/// <returns>CpuID</returns>
public static string GetCpuID()
{try{string strCpuID = string.Empty;ManagementClass mc = new ManagementClass("Win32_Processor");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){strCpuID = mo.Properties["ProcessorId"].Value.ToString();}moc = null;mc = null;return strCpuID;}catch{return "unknown";}
}
/// <summary>
/// 獲取操作系統類型
/// </summary>
/// <returns>操作系統類型</returns>
public static string GetSystemType()
{try{string strSystemType = string.Empty;ManagementClass mc = new ManagementClass("Win32_ComputerSystem");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){strSystemType = mo["SystemType"].ToString();}moc = null;mc = null;return strSystemType;}catch{return "unknown";}
}
/// <summary>
/// 獲取操作系統名稱
/// </summary>
/// <returns>操作系統名稱</returns>
public static string GetSystemName()
{try{string strSystemName = string.Empty;ManagementObjectSearcher mos = new ManagementObjectSearcher("root\\CIMV2", "SELECT PartComponent FROM Win32_SystemOperatingSystem");foreach (ManagementObject mo in mos.Get()){strSystemName = mo["PartComponent"].ToString();}mos = new ManagementObjectSearcher("root\\CIMV2", "SELECT Caption FROM Win32_OperatingSystem");foreach (ManagementObject mo in mos.Get()){strSystemName = mo["Caption"].ToString();}return strSystemName;}catch{return "unknown";}
}
/// <summary>
/// 獲取物理內存信息
/// </summary>
/// <returns>物理內存信息</returns>
public static string GetTotalPhysicalMemory()
{try{string strTotalPhysicalMemory = string.Empty;ManagementClass mc = new ManagementClass("Win32_ComputerSystem");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){strTotalPhysicalMemory = mo["TotalPhysicalMemory"].ToString();}moc = null;mc = null;return strTotalPhysicalMemory;}catch{return "unknown";}
}/// <summary>
/// 獲取主板id
/// </summary>
/// <returns></returns>
public static string GetMotherBoardID()
{try{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;}catch{return "unknown";}
}/// <summary>
/// 獲取公用桌面路徑