加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VS/C#中的ManagementClass类和获取硬件的信息的用法

(2019-06-13 18:00:05)
标签:

it

分类: C#应用
VS/C#中的ManagementClass类和获取硬件的信息的用法

在.NET的项目中,有时候需要获取计算机的硬件的相关信息,在C#语言中需要利用ManagementClass这个类来进行相关操作。
ManagementClass类:对表示一个通用信息模型 (CIM) 管理类。 管理类是 WMI 类,如 Win32_LogicalDisk,该类型可表示一个磁盘驱动器,并 Win32_Process,它表示的进程 Notepad.exe 等。 此类的成员可以访问 WMI 数据,使用一个特定的 WMI 类路径。
VS/C#中的ManagementClass类和获取硬件的信息的用法
1.GetInstances():此方法存在四个重载
VS/C#中的ManagementClass类和获取硬件的信息的用法

2.Get():
VS/C#中的ManagementClass类和获取硬件的信息的用法

3.GetSubclasses():此方法存在四个重载版本
VS/C#中的ManagementClass类和获取硬件的信息的用法

C# 提供了ManagementClass类来获取本机的一些基本信息,比如CPU的个数,CPU的频率,网卡的MAC,内存的大小,硬盘的大小等。

VS/C#中的ManagementClass类和获取硬件的信息的用法


//-----------------------
// @Author GarFey
// @date 20190612
// @version 1.0
//-----------------------
using System;
using System.Management;
using System.Windows.Forms;

namespace GetPCInfo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.macPathtextBox.Text = GetMACString();
            this.cpuCounttextBox.Text = GetCpuCount().ToString();
            string[] cpuhz = GetCpuMHZ();
            foreach( string hz in cpuhz)
            {
                this.cpuMHZtextBox.Text += hz+"\n";
            }
            
            this.diskSizetextBox.Text = GetSizeOfDisk();
            this.MemorySizetextBox.Text = GetSizeOfMemery();
            this.cpuIdtextBox.Text = GetCpuid();
            this.diskSerialNumbertextBox.Text = GetDiskSerialNumber();
            this.networkAddresstextBox.Text = GetMacAddress();
            this.IpAddresstextBox.Text = GetIpAddress();
            this.userNametextBox.Text = GetUserName();
            this.pcNametextBox.Text = GetComputerName();
            this.sysTypetextBox.Text = GetSystemType();
            this.physicalMemorytextBox.Text = GetPhysicalMemory();
            this.videoPnpidtextBox.Text = GetVideoPnpid();
            this.soundPnpidtextBox.Text = GetSoundPnpid();
            this.cpuVersiontextBox.Text = GetCpuVersion();
            this.cpuNametextBox.Text = GetCpuName();
            this.cpuManufacturertextBox.Text = GetCpuManufacturer();
            this.boardManufacturertextBox.Text = GetBoardManufacturer();
            this.boardIdtextBox.Text = GetBoardId();
            this.boardTypetextBox.Text = GetBoardType();
        }

        ///
        /// 获取本机的MAC地址
        ///
        ///
        private string GetMACString()
        {
            ManagementClass mAdapter = new ManagementClass("Win32_NetworkAdapterConfiguration");
            ManagementObjectCollection mo = mAdapter.GetInstances();
            foreach (ManagementBaseObject m in mo)
            {
                if ((bool)m["IpEnabled"] == true)
                {
                    return m["MacAddress"].ToString();
                }
            }
            mo.Dispose();
            return "";// null;
        }

        ///
        /// 获取CPU的个数
        ///
        ///
        private int GetCpuCount()
        {
            try
            {
                using (ManagementClass mCpu = new ManagementClass("Win32_Processor"))
                {
                    ManagementObjectCollection cpus = mCpu.GetInstances();
                    return cpus.Count;
                }
            }
            catch
            {
            }
            return -1;
        }

        ///
        /// 获取CPU的频率 这里之所以使用string类型的数组,主要是因为cpu的多核
        ///
        ///
        private string[] GetCpuMHZ()
        {
            ManagementClass mc = new ManagementClass("Win32_Processor");
            ManagementObjectCollection cpus = mc.GetInstances();
            string[] mHz = new string[cpus.Count];
            int c = 0;
            ManagementObjectSearcher mySearch = new ManagementObjectSearcher("select * from Win32_Processor");
            foreach (ManagementObject mo in mySearch.Get())
            {
                mHz[c] = mo.Properties["CurrentClockSpeed"].Value.ToString();
                c++;
            }
            mc.Dispose();
            mySearch.Dispose();
            return mHz;
        }

        ///
        /// 获取硬盘的大小
        ///
        ///
        private string GetSizeOfDisk()
        {
            ManagementClass mc = new ManagementClass("Win32_DiskDrive");
            ManagementObjectCollection moj = mc.GetInstances();
            foreach (ManagementObject m in moj)
            {
                return m.Properties["Size"].Value.ToString();
            }
            return "-1";
        }

        ///
        /// 获取内存的大小
        ///
        ///
        private string GetSizeOfMemery()
        {
            ManagementClass mc = new ManagementClass("Win32_OperatingSystem");
            ManagementObjectCollection moc = mc.GetInstances();
            double sizeAll = 0.0;
            foreach (ManagementObject m in moc)
            {
                if (m.Properties["TotalVisibleMemorySize"].Value != null)
                {
                    sizeAll += Convert.ToDouble(m.Properties["TotalVisibleMemorySize"].Value.ToString());
                }
            }
            mc = null;
            moc.Dispose();
            return sizeAll.ToString();
        }

        ///
        /// 获得CPU编号
        ///
        ///
        public string GetCpuid()
        {
            var cpuid = string.Empty;
            var mc = new ManagementClass("Win32_Processor");
            var moc = mc.GetInstances();
            foreach (var o in moc)
            {
                var mo = (ManagementObject)o;
                cpuid = mo.Properties["ProcessorId"].Value.ToString();
            }
            return cpuid;
        }

        ///
        /// 获取硬盘序列号
        ///
        ///
        public string GetDiskSerialNumber()
        {
            //这种模式在插入一个U盘后可能会有不同的结果,如插入我的手机时
            var hDid = string.Empty;
            var mc = new ManagementClass("Win32_DiskDrive");
            var moc = mc.GetInstances();
            foreach (var o in moc)
            {
                var mo = (ManagementObject)o;
                hDid = (string)mo.Properties["Model"].Value;
                //这名话解决有多个物理盘时产生的问题,只取第一个物理硬盘
                break;
            }
            return hDid;
        }

        ///
        /// 获取网卡硬件地址
        ///
        ///  
        public string GetMacAddress()
        {
            var mac = "";
            var mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
            var moc = mc.GetInstances();
            foreach (var o in moc)
            {
                var mo = (ManagementObject)o;
                if (!(bool)mo["IPEnabled"]) continue;
                mac = mo["MacAddress"].ToString();
                break;
            }
            return mac;
        }

        ///
        /// 获取IP地址
        ///
        ///
        public string GetIpAddress()
        {
            var st = string.Empty;
            var mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
            var moc = mc.GetInstances();
            foreach (var o in moc)
            {
                var mo = (ManagementObject)o;
                if (!(bool)mo["IPEnabled"]) continue;
                var ar = (Array)(mo.Properties["IpAddress"].Value);
                st = ar.GetValue(0).ToString();
                break;
            }
            return st;
        }

        ///
        /// 操作系统的登录用户名
        ///
        ///  
        public string GetUserName()
        {
            return Environment.UserName;
        }


        ///
        /// 获取计算机名
        ///
        ///
        public string GetComputerName()
        {
            return Environment.MachineName;
        }

        ///
        /// 操作系统类型
        ///
        ///  
        public string GetSystemType()
        {
            var st = string.Empty;
            var mc = new ManagementClass("Win32_ComputerSystem");
            var moc = mc.GetInstances();
            foreach (var o in moc)
            {
                var mo = (ManagementObject)o;
                st = mo["SystemType"].ToString();
            }
            return st;
        }

        ///
        /// 物理内存
        ///
        ///
        public string GetPhysicalMemory()
        {
            var st = string.Empty;
            var mc = new ManagementClass("Win32_ComputerSystem");
            var moc = mc.GetInstances();
            foreach (var o in moc)
            {
                var mo = (ManagementObject)o;
                st = mo["TotalPhysicalMemory"].ToString();
            }
            return st;
        }

        ///
        /// 显卡PNPDeviceID
        ///
        ///
        public string GetVideoPnpid()
        {
            var st = "";
            var mos = new ManagementObjectSearcher("Select * from Win32_VideoController");
            foreach (var o in mos.Get())
            {
                var mo = (ManagementObject)o;
                st = mo["PNPDeviceID"].ToString();
            }
            return st;
        }

        ///
        /// 声卡PNPDeviceID
        ///
        ///
        public string GetSoundPnpid()
        {
            var st = string.Empty;
            var mos = new ManagementObjectSearcher("Select * from Win32_SoundDevice");
            foreach (var o in mos.Get())
            {
                var mo = (ManagementObject)o;
                st = mo["PNPDeviceID"].ToString();
            }
            return st;
        }

        ///
        /// CPU版本信息
        ///
        ///
        public string GetCpuVersion()
        {
            var st = string.Empty;
            var mos = new ManagementObjectSearcher("Select * from Win32_Processor");
            foreach (var o in mos.Get())
            {
                var mo = (ManagementObject)o;
                st = mo["Version"].ToString();
            }
            return st;
        }

        ///
        /// CPU名称信息
        ///
        ///
        public string GetCpuName()
        {
            var st = string.Empty;
            var driveId = new ManagementObjectSearcher("Select * from Win32_Processor");
            foreach (var o in driveId.Get())
            {
                var mo = (ManagementObject)o;
                st = mo["Name"].ToString();
            }
            return st;
        }

        ///
        /// CPU制造厂商
        ///
        ///
        public string GetCpuManufacturer()
        {
            var st = string.Empty;
            var mos = new ManagementObjectSearcher("Select * from Win32_Processor");
            foreach (var o in mos.Get())
            {
                var mo = (ManagementObject)o;
                st = mo["Manufacturer"].ToString();
            }
            return st;
        }

        ///
        /// 主板制造厂商
        ///
        ///
        public string GetBoardManufacturer()
        {
            var query = new SelectQuery("Select * from Win32_BaseBoard");
            var mos = new ManagementObjectSearcher(query);
            var data = mos.Get().GetEnumerator();
            data.MoveNext();
            var board = data.Current;
            return board.GetPropertyValue("Manufacturer").ToString();
        }

        ///
        /// 主板编号
        ///
        ///
        public string GetBoardId()
        {
            var st = string.Empty;
            var mos = new ManagementObjectSearcher("Select * from Win32_BaseBoard");
            foreach (var o in mos.Get())
            {
                var mo = (ManagementObject)o;
                st = mo["SerialNumber"].ToString();
            }
            return st;
        }

        ///
        /// 主板型号
        ///
        ///
        public string GetBoardType()
        {
            var st = string.Empty;
            var mos = new ManagementObjectSearcher("Select * from Win32_BaseBoard");
            foreach (var o in mos.Get())
            {
                var mo = (ManagementObject)o;
                st = mo["Product"].ToString();
            }
            return st;
        }

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有