1. 程式人生 > >c#中如何獲取本機MAC地址、IP地址、硬碟ID、CPU序列號等系統資訊

c#中如何獲取本機MAC地址、IP地址、硬碟ID、CPU序列號等系統資訊

       我們在利用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>
        /// 獲取公用桌面路徑         
        public static string GetAllUsersDesktopFolderPath()
        {
            RegistryKey folders;
            folders = OpenRegistryPath(Registry.LocalMachine, @"/software/microsoft/windows/currentversion/explorer/shell folders");
            string desktopPath = folders.GetValue("Common Desktop").ToString();
            return desktopPath;
        }
        /// <summary>
        /// 獲取公用啟動項路徑
        /// </summary>
        public static string GetAllUsersStartupFolderPath()
        {
            RegistryKey folders;
            folders = OpenRegistryPath(Registry.LocalMachine, @"/software/microsoft/windows/currentversion/explorer/shell folders");
            string Startup = folders.GetValue("Common Startup").ToString();
            return Startup;
        }
        private static RegistryKey OpenRegistryPath(RegistryKey root, string s)
        {
            s = s.Remove(0, 1) + @"/";
            while (s.IndexOf(@"/") != -1)
            {
                root = root.OpenSubKey(s.Substring(0, s.IndexOf(@"/")));
                s = s.Remove(0, s.IndexOf(@"/") + 1);
            }
            return root;
        }
       private void Test()
        {
            RegistryKey folders;
            folders = OpenRegistryPath(Registry.LocalMachine, @"/software/microsoft/windows/currentversion/explorer/shell folders");
            // Windows使用者桌面路徑
            string desktopPath = folders.GetValue("Common Desktop").ToString();
            // Windows使用者字型目錄路徑
            string fontsPath = folders.GetValue("Fonts").ToString();
            // Windows使用者網路鄰居路徑
            string nethoodPath = folders.GetValue("Nethood").ToString();
            // Windows使用者我的文件路徑
            string personalPath = folders.GetValue("Personal").ToString();
            // Windows使用者開始選單程式路徑
            string programsPath = folders.GetValue("Programs").ToString();
            // Windows使用者存放使用者最近訪問文件快捷方式的目錄路徑
            string recentPath = folders.GetValue("Recent").ToString();
            // Windows使用者傳送到目錄路徑
            string sendtoPath = folders.GetValue("Sendto").ToString();
            // Windows使用者開始選單目錄路徑
            string startmenuPath = folders.GetValue("Startmenu").ToString();
            // Windows使用者開始選單啟動項目錄路徑
            string startupPath = folders.GetValue("Startup").ToString();
            // Windows使用者收藏夾目錄路徑
            string favoritesPath = folders.GetValue("Favorites").ToString();
            // Windows使用者網頁歷史目錄路徑
            string historyPath = folders.GetValue("History").ToString();
            // Windows使用者Cookies目錄路徑
            string cookiesPath = folders.GetValue("Cookies").ToString();
            // Windows使用者Cache目錄路徑
            string cachePath = folders.GetValue("Cache").ToString();
            // Windows使用者應用程式資料目錄路徑
            string appdataPath = folders.GetValue("Appdata").ToString();
            // Windows使用者列印目錄路徑
            string printhoodPath = folders.GetValue("Printhood").ToString();
        }</span>