新思想

C# 计算机硬件信息 源代码

C# 计算机硬件信息 源代码

HardwareInfo

//可以利用 System.Management 类来获取硬件信息,Computer System Hardware Classes 包括以下类型硬件:
//https://msdn.microsoft.com/en-us/library/windows/desktop/aa389273(v=vs.140).aspx

//参考以下程序:
//http://www.codeproject.com/Articles/17973/How-To-Get-Hardware-Information-CPU-ID-MainBoard-I

using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
// 需要手工在“解决方案资源管理器”下的“引用”中添加 "System.ServiceProcess"
using System.Management;

namespace HardwareInfo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            cmbxOption.SelectedItem = "Win32_Processor";
        }

        private void InsertInfo(string Key, bool DontInsertNull)
        {
            ListView lst = lstInfo;
            lst.Items.Clear();

            // foreach (var obj in new ManagementClass(Key).GetInstances())
            //     foreach (var myProperty in new ManagementClass(Key).Properties)
            //         Console.WriteLine("{0}: {1}", myProperty.Name, obj.Properties[myProperty.Name].Value);
            // Console.WriteLine();

            ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + Key);

            try
            {
                foreach (ManagementObject share in searcher.Get())
                {
                    ListViewGroup grp;
                    try
                    {
                        grp = lst.Groups.Add(share["Name"].ToString(), share["Name"].ToString());
                    }
                    catch
                    {
                        grp = lst.Groups.Add(share.ToString(), share.ToString());
                    }

                    if (share.Properties.Count <= 0)
                    {
                        MessageBox.Show("没有可用的信息", "没有信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }

                    foreach (PropertyData PC in share.Properties)
                    {
                        ListViewItem item = new ListViewItem(grp);
                        if (lst.Items.Count % 2 != 0)
                            item.BackColor = Color.White;
                        else
                            item.BackColor = Color.WhiteSmoke;

                        item.Text = PC.Name;

                        if (PC.Value != null && PC.Value.ToString() != "")
                        {
                            switch (PC.Value.GetType().ToString())
                            {
                                case "System.String[]":
                                    string[] str = (string[])PC.Value;

                                    string str2 = "";
                                    foreach (string st in str)
                                        str2 += st + " ";

                                    item.SubItems.Add(str2);

                                    break;
                                case "System.UInt16[]":
                                    ushort[] shortData = (ushort[])PC.Value;

                                    string tstr2 = "";
                                    foreach (ushort st in shortData)
                                        tstr2 += st.ToString() + " ";

                                    item.SubItems.Add(tstr2);

                                    break;

                                default:
                                    item.SubItems.Add(PC.Value.ToString());
                                    break;
                            }
                        }
                        else
                        {
                            if (!DontInsertNull)
                                item.SubItems.Add("没有可用的信息");
                            else
                                continue;
                        }
                        lst.Items.Add(item);
                    }
                }
            }
            catch (Exception exp)
            {
                MessageBox.Show("因为以下错误,不能获得数据\n" + exp.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void RemoveNullValue(ref ListView lst)
        {
            foreach (ListViewItem item in lst.Items)
                if (item.SubItems[1].Text == "没有可用的信息")
                    item.Remove();
        }

        private void cmbxOption_SelectedIndexChanged(object sender, EventArgs e)
        {
            InsertInfo(cmbxOption.SelectedItem.ToString(), chkOption.Checked);
        }

        private void chkOption_CheckedChanged(object sender, EventArgs e)
        {
            if (chkOption.Checked)
                RemoveNullValue(ref lstInfo);
            else
                InsertInfo(cmbxOption.SelectedItem.ToString(), false);
        }

        //参考以下程序:
        //https://computerid.codeplex.com/releases/view/13145

        private void btnSummary_Click(object sender, EventArgs e)
        {
            StringBuilder generalInfo = new StringBuilder(2560);

            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");
            foreach (ManagementObject wmi_Windows in searcher.Get())
                generalInfo.Append("操作系统: " +
                                      wmi_Windows["Caption"].ToString() + "  " + wmi_Windows["OSArchitecture"].ToString() + "\t" +
                                      "补丁版本: " + wmi_Windows["CSDVersion"].ToString() + "\n" +
                                      "用户名  : " + wmi_Windows["RegisteredUser"].ToString() + "\t\t" +
                                      "组织名  : " + wmi_Windows["Organization"].ToString() + "\t\t" +
                                      "描述    : " + wmi_Windows["Description"].ToString() + "\n");

            generalInfo.Append("\n" + "硬件配置:\n" +
                                  "--------------------------------------------------------\n" +
                                  "CPU(s):\n");
            
            searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
            foreach (ManagementObject wmi_Cpu in searcher.Get())
                generalInfo.Append("名称: " + wmi_Cpu["Name"].ToString() + "\t" +
                                      "时钟频率: " + wmi_Cpu["CurrentClockSpeed"].ToString() + "MHz" + "\n");

            generalInfo.Append("\n" + "主板:\n");

            float total_ram = 0;
            searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMemory");
            foreach (ManagementObject wmi_myMotherboard in searcher.Get())
                total_ram = total_ram + float.Parse(wmi_myMotherboard["Capacity"].ToString());

            searcher = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
            foreach (ManagementObject wmi_myMotherboard in searcher.Get())
                generalInfo.Append("型号    : " + wmi_myMotherboard["Product"].ToString() + "\t\t" +
                                      "制造商  : " + wmi_myMotherboard["Manufacturer"].ToString() + "\n" +
                                      "内存容量: " + ((total_ram / 1024) / 1024).ToString() + " MB" + "\n");

            generalInfo.Append("\n" + "硬盘:\n");

            double TotalSize = 0, TotalSpaceLeft = 0;
            searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
            foreach (ManagementObject wmi_HD in searcher.Get())
            {
                TotalSize += double.Parse(wmi_HD["Size"].ToString());
                generalInfo.Append(wmi_HD["Model"].ToString() + "   " + Math.Round((((double.Parse(wmi_HD["Size"].ToString()) / 1024) / 1024) / 1024), 2) + " GB");
            }

            searcher = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk");
            foreach (ManagementObject wmi_HD in searcher.Get())
                if (wmi_HD["FreeSpace"] != null)
                    if (wmi_HD["DriveType"].ToString() == "3")
                        TotalSpaceLeft += double.Parse(wmi_HD["FreeSpace"].ToString());

            generalInfo.Append("\n" + "总容量  : " + Math.Round((((TotalSize / 1024) / 1024) / 1024), 2) + " GB" + "\t\t" +
                                  "可用空间: " + Math.Round(TotalSpaceLeft * 100 / TotalSize, 2) + "% (" + Math.Round(((((TotalSpaceLeft / 1024) / 1024)) / 1024), 2) + " GB)\n");

            generalInfo.Append("\n" + "显卡:\n");

            searcher = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController");
            foreach (ManagementObject wmi_myvideo in searcher.Get())
                generalInfo.Append("名称    : " + wmi_myvideo["Name"].ToString() + "\t" +
                                      "显存    : " + (float.Parse(wmi_myvideo["AdapterRAM"].ToString()) / 1024 / 1024) + " MB \n" +
                                      "驱动版本: " + wmi_myvideo["DriverVersion"].ToString() + "\n");

            generalInfo.Append("\n" + "网卡:\n");

            searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled ='TRUE'");
            foreach (ManagementObject wmi_NetWorkCard in searcher.Get())
            {
                string[] tempIP = wmi_NetWorkCard["IPAddress"] as string[];
                generalInfo.Append("名称    : " + wmi_NetWorkCard["Description"].ToString() + "\n" +
                                      "IP 地址 : " + tempIP[0].ToString() + "\t\t");
                try
                {
                    generalInfo.Append("本地地址: " + tempIP[1].ToString() + "\n");
                }
                catch (Exception)
                {
                    generalInfo.Append("本地地址: " + "\n");
                }

                string defaultIPGateway = "";
                try
                {
                    string[] tempIPGateway;
                    tempIPGateway = wmi_NetWorkCard["DefaultIPGateway"] as string[];

                    foreach (string x in tempIPGateway)
                    {
                        defaultIPGateway += x + ",";
                    }

                    tempIPGateway = null;
                }
                catch (Exception ex)
                {
                    // MessageBox.Show(ex.ToString());
                }

                if (defaultIPGateway.ToString() != string.Empty)
                    generalInfo.Append("默认网关: " + defaultIPGateway.ToString() + "\n\n");
                else
                    generalInfo.Append("\n");
            }

            MessageBox.Show(generalInfo.ToString(), "常用信息", MessageBoxButtons.OK);
        }
    }
}

源程序下载

执行程序下载

posted on 2015-11-30 22:38  新思想  阅读(349)  评论(0)    收藏  举报

导航