C#獲取電腦型號、系統版本、內存大小、硬盤大小、CPU信息


摘要

有時需要獲取電腦的相關信息。這時可以通過調用windows api的方式,進行獲取。

方法

可以通過在powershell中 通過下面的命令進行查詢,然后可以通過c#調用獲取需要的信息。

gwmi + windows api 

如圖所示

對應的c#代碼為

  /// <summary>
        /// 獲取硬盤容量
        /// </summary>
        public string GetDiskSize()
        {
            string result = string.Empty;
            StringBuilder sb = new StringBuilder();
            try
            {
                string hdId = string.Empty;
                ManagementClass hardDisk = new ManagementClass(WindowsAPIType.win32_DiskDrive.ToString());
                ManagementObjectCollection hardDiskC = hardDisk.GetInstances();
                foreach (ManagementObject m in hardDiskC)
                {
                    long capacity = Convert.ToInt64(m[WindowsAPIKeys.Size.ToString()].ToString());
                    sb.Append(CommonUtlity.ToGB(capacity, 1000.0) + "+");
                }
                result = sb.ToString().TrimEnd('+');
            }
            catch
            {

            }
            return result;
        }

API和Keys枚舉

    /// <summary>
    /// windows api 名稱
    /// </summary>
    public enum WindowsAPIType
    {
        /// <summary>
        /// 內存
        /// </summary>
        Win32_PhysicalMemory,
        /// <summary>
        /// cpu
        /// </summary>
        Win32_Processor,
        /// <summary>
        /// 硬盤
        /// </summary>
        win32_DiskDrive,
        /// <summary>
        /// 電腦型號
        /// </summary>
        Win32_ComputerSystemProduct,
        /// <summary>
        /// 分辨率
        /// </summary>
        Win32_DesktopMonitor,
        /// <summary>
        /// 顯卡
        /// </summary>
        Win32_VideoController,
        /// <summary>
        /// 操作系統
        /// </summary>
        Win32_OperatingSystem

    }
    public enum WindowsAPIKeys
    {
        /// <summary>
        /// 名稱
        /// </summary>
        Name,
        /// <summary>
        /// 顯卡芯片
        /// </summary>
        VideoProcessor,
        /// <summary>
        /// 顯存大小
        /// </summary>
        AdapterRAM,
        /// <summary>
        /// 分辨率寬
        /// </summary>
        ScreenWidth,
        /// <summary>
        /// 分辨率高
        /// </summary>
        ScreenHeight,
        /// <summary>
        /// 電腦型號
        /// </summary>
        Version,
        /// <summary>
        /// 硬盤容量
        /// </summary>
        Size,
        /// <summary>
        /// 內存容量
        /// </summary>
        Capacity,
        /// <summary>
        /// cpu核心數
        /// </summary>
        NumberOfCores
    }

Computer類

    /// <summary>
    /// 電腦信息類 單例
    /// </summary>
    public class Computer
    {
        private static Computer _instance;
        private static readonly object _lock = new object();
        private Computer()
        { }
        public static Computer CreateComputer()
        {
            if (_instance == null)
            {
                lock (_lock)
                {
                    if (_instance == null)
                    {
                        _instance = new Computer();
                    }
                }
            }
            return _instance;
        }
        /// <summary>
        /// 查找cpu的名稱,主頻, 核心數
        /// </summary>
        /// <returns></returns>
        public Tuple<string, string> GetCPU()
        {
            Tuple<string, string> result = null;
            try
            {
                string str = string.Empty;
                ManagementClass mcCPU = new ManagementClass(WindowsAPIType.Win32_Processor.ToString());
                ManagementObjectCollection mocCPU = mcCPU.GetInstances();
                foreach (ManagementObject m in mocCPU)
                {
                    string name = m[WindowsAPIKeys.Name.ToString()].ToString();
                    string[] parts = name.Split('@');
                    result = new Tuple<string, string>(parts[0].Split('-')[0] + "處理器", parts[1]);
                    break;
                }

            }
            catch
            {

            }
            return result;
        }


        /// <summary>
        /// 獲取cpu核心數
        /// </summary>
        /// <returns></returns>
        public string GetCPU_Count()
        {
            string str = "查詢失敗";
            try
            {
                int coreCount = 0;
                foreach (var item in new System.Management.ManagementObjectSearcher("Select * from " +
WindowsAPIType.Win32_Processor.ToString()).Get()) { coreCount += int.Parse(item[WindowsAPIKeys.NumberOfCores.ToString()].ToString()); } if (coreCount == 2) { return "雙核"; } str = coreCount.ToString() + ""; } catch { } return str; } /// <summary> /// 獲取系統內存大小 /// </summary> /// <returns>內存大小(單位M)</returns> public string GetPhisicalMemory() { ManagementObjectSearcher searcher = new ManagementObjectSearcher(); //用於查詢一些如系統信息的管理對象 searcher.Query = new SelectQuery(WindowsAPIType.Win32_PhysicalMemory.ToString(), "",
new string[] { WindowsAPIKeys.Capacity.ToString() });//設置查詢條件 ManagementObjectCollection collection = searcher.Get(); //獲取內存容量 ManagementObjectCollection.ManagementObjectEnumerator em = collection.GetEnumerator(); long capacity = 0; while (em.MoveNext()) { ManagementBaseObject baseObj = em.Current; if (baseObj.Properties[WindowsAPIKeys.Capacity.ToString()].Value != null) { try { capacity += long.Parse(baseObj.Properties[WindowsAPIKeys.Capacity.ToString()].Value.ToString()); } catch { return "查詢失敗"; } } } return CommonUtlity.ToGB((double)capacity, 1024.0); } /// <summary> /// 獲取硬盤容量 /// </summary> public string GetDiskSize() { string result = string.Empty; StringBuilder sb = new StringBuilder(); try { string hdId = string.Empty; ManagementClass hardDisk = new ManagementClass(WindowsAPIType.win32_DiskDrive.ToString()); ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); foreach (ManagementObject m in hardDiskC) { long capacity = Convert.ToInt64(m[WindowsAPIKeys.Size.ToString()].ToString()); sb.Append(CommonUtlity.ToGB(capacity, 1000.0) + "+"); } result = sb.ToString().TrimEnd('+'); } catch { } return result; } /// <summary> /// 電腦型號 /// </summary> public string GetVersion() { string str = "查詢失敗"; try { string hdId = string.Empty; ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_ComputerSystemProduct.ToString()); ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); foreach (ManagementObject m in hardDiskC) { str = m[WindowsAPIKeys.Version.ToString()].ToString(); break; } } catch { } return str; } /// <summary> /// 獲取分辨率 /// </summary> public string GetFenbianlv() { string result = "1920*1080"; try { string hdId = string.Empty; ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_DesktopMonitor.ToString()); ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); foreach (ManagementObject m in hardDiskC) { result = m[WindowsAPIKeys.ScreenWidth.ToString()].ToString() + "*" +
m[WindowsAPIKeys.ScreenHeight.ToString()].ToString();
break; } } catch { } return result; } /// <summary> /// 顯卡 芯片,顯存大小 /// </summary> public Tuple<string, string> GetVideoController() { Tuple<string, string> result = null; try { ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_VideoController.ToString()); ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); foreach (ManagementObject m in hardDiskC) { result = new Tuple<string, string>(m[WindowsAPIKeys.VideoProcessor.ToString()].ToString()
.Replace("Family", ""), CommonUtlity.ToGB(Convert.ToInt64(m[WindowsAPIKeys.AdapterRAM.ToString()].ToString()), 1024.0)); break; } } catch { } return result; } /// <summary> /// 操作系統版本 /// </summary> public string GetOS_Version() { string str = "Windows 10"; try { string hdId = string.Empty; ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_OperatingSystem.ToString()); ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); foreach (ManagementObject m in hardDiskC) { str = m[WindowsAPIKeys.Name.ToString()].ToString().Split('|')[0].Replace("Microsoft", ""); break; } } catch { } return str; } }

這里只是枚舉了部分api,有興趣的可以查看其它的windows api 並通過power shell查看,然后轉化為c# 代碼即可。

這里需要注意,硬盤容量在轉化的時候需要除以1000,而不是1024.但內存是需要除以1024的,這點需要注意。

轉化方法:

   /// <summary>  
        /// 將字節轉換為GB
        /// </summary>  
        /// <param name="size">字節值</param>  
        /// <param name="mod">除數,硬盤除以1000,內存除以1024</param>  
        /// <returns></returns>  
        public static string ToGB(double size, double mod)
        {
            String[] units = new String[] { "B", "KB", "MB", "GB", "TB", "PB" };
            int i = 0;
            while (size >= mod)
            {
                size /= mod;
                i++;
            }
            return Math.Round(size) + units[i];
        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM