我们在利用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>
/// 获取公用桌面路径