c# WMI获取机器硬件信息(硬盘,cpu,内存等)

Posted 晨曦歡迎您!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# WMI获取机器硬件信息(硬盘,cpu,内存等)相关的知识,希望对你有一定的参考价值。

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Management;
using System.IO;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Text;

namespace UsbDemo
{
    internal enum WmiType
    {
        Win32_Processor,
        Win32_PerfFormattedData_PerfOS_Memory,
        Win32_PhysicalMemory,
        Win32_NetworkAdapterConfiguration,
        Win32_LogicalDisk
    }

    /// <summary>
    /// 获取硬盘号和CPU号
    /// </summary>
    public class WmiHelper
    {
        public class MachineNumber
        {
            static Dictionary<string, ManagementObjectCollection> WmiDict =
                new Dictionary<string, ManagementObjectCollection>();

            static MachineNumber()
            {
                var names = Enum.GetNames(typeof(WmiType));
                foreach (string name in names)
                {
                    WmiDict.Add(name, new ManagementObjectSearcher("SELECT * FROM " + name).Get());
                }
            }

            /// <summary>
            /// 获取硬盘号码
            /// </summary>
            /// <returns></returns>
            public static string GetHardDiskNumber()
            {
                var query = WmiDict[WmiType.Win32_LogicalDisk.ToString()];
                //var collection = query.Get();

                string result = string.Empty;
                foreach (var obj in query)
                {
                    result = obj["VolumeSerialNumber"].ToString();
                    break;
                }

                return result;
            }

            /// <summary>
            /// 获取CPU号码
            /// </summary>
            /// <returns></returns>
            public static string GetCPUNumber()
            {
                var query = WmiDict[WmiType.Win32_Processor.ToString()];
                //var collection = query.Get();

                string result = string.Empty;
                foreach (var obj in query)
                {
                    result = obj["Processorid"].ToString();
                    break;
                }

                return result;
            }

            /// <summary>
            /// 获取内存编号
            /// </summary>
            /// <returns></returns>
            public static string GetMemoryNumber()
            {
                var query = WmiDict[WmiType.Win32_PhysicalMemory.ToString()];
                //var collection = query.Get();

                string result = string.Empty;
                foreach (var obj in query)
                {
                    result = obj["PartNumber"].ToString();
                    break;
                }
                return result;
            }

            /// <summary>
            /// 获取硬盘信息
            /// </summary>
            /// <returns></returns>
            public static string HardDiskInfo()
            {
                DriveInfo[] drives = DriveInfo.GetDrives();
                StringBuilder sr = new StringBuilder();
                foreach (DriveInfo drive in drives)
                {
                    if (drive.IsReady)
                    {
                        var val1 = (double)drive.TotalSize / 1024 / 1024;
                        var val2 = (double)drive.TotalFreeSpace / 1024 / 1024;
                        sr.AppendFormat("{0}:{2}/{3}MB/{4}MB/{1}%可用;" + Environment.NewLine, drive.Name, string.Format("{0:F2}", val2 / val1 * 100), drive.DriveFormat, (long)val1, (long)val2);
                    }
                }
                return sr.ToString();
            }

            /// <summary>
            /// 获取操作系统信息
            /// </summary>
            /// <returns></returns>
            public static string OSInfo()
            {
                StringBuilder sr = new StringBuilder();
                sr.AppendFormat("机器名:{0};操作系统:{1};系统文件夹:{2};语言:{3};.NET:{4};当前目录:{5};当前用户:{6};",
                    Environment.MachineName,
                    Environment.OSVersion,
                    Environment.SystemDirectory,
                    CultureInfo.InstalledUICulture.EnglishName,
                    Environment.Version,
                    Environment.CurrentDirectory,
                    Environment.UserName);
                return sr.ToString();
            }

            /// <summary>
            /// 获取网卡信息
            /// </summary>
            /// <returns></returns>
            public static string NetworkInfo()
            {
                StringBuilder sr = new StringBuilder();

                string host = Dns.GetHostName();
                IPHostEntry ipEntry = Dns.GetHostByName(host);
                sr.Append("IPv4:" + ipEntry.AddressList[0] + "/");

                sr.Append("IPv6:");
                ipEntry = Dns.GetHostEntry(host);
                sr.Append("IPv6:" + ipEntry.AddressList[0] + ";");

                sr.Append("MAC:");
                var query = WmiDict[WmiType.Win32_NetworkAdapterConfiguration.ToString()];
                foreach (var obj in query)
                {
                    if (obj["IPEnabled"].ToString() == "True")
                        sr.Append(obj["MacAddress"] + ";");
                }

                return sr.ToString();
            }

            /// <summary>
            /// 获取内存信息
            /// </summary>
            /// <returns></returns>
            public static string MemoryInfo()
            {
                StringBuilder sr = new StringBuilder();
                try
                {
                    long capacity = 0;
                    var query = WmiDict[WmiType.Win32_PhysicalMemory.ToString()];
                    int index = 1;
                    foreach (var obj in query)
                    {
                        //sr.Append("内存" + index + "频率:" + obj["ConfiguredClockSpeed"] + ";");
                        capacity += Convert.ToInt64(obj["Capacity"]);
                        index++;
                    }
                    sr.Append("总物理内存:");
                    sr.Append(capacity / 1024 / 1024 + "MB;");

                    query = WmiDict[WmiType.Win32_PerfFormattedData_PerfOS_Memory.ToString()];
                    sr.Append("总可用内存:");
                    long available = 0;
                    foreach (var obj in query)
                    {
                        available += Convert.ToInt64(obj.Properties["AvailableMBytes"].Value);
                    }
                    sr.Append(available + "MB;");
                    sr.AppendFormat("{0:F2}%可用; ", (double)available / (capacity / 1024 / 1024) * 100);
                }
                catch (Exception ex)
                {
                    sr.Append("异常信息:" + ex.Message);
                }

                return sr.ToString();
            }

            /// <summary>
            /// 获取CPU信息
            /// </summary>
            /// <returns></returns>
            public static string CpuInfo()
            {
                StringBuilder sr = new StringBuilder();

                var query = WmiDict[WmiType.Win32_Processor.ToString()];
                foreach (var obj in query)
                {
                    sr.Append("厂商:" + obj["Manufacturer"] + ";");
                    sr.Append("产品名称:" + obj["Name"] + ";");
                    sr.Append("最大频率:" + obj["MaxClockSpeed"] + ";");
                    sr.Append("当前频率:" + obj["CurrentClockSpeed"] + ";");
                }

                return sr.ToString();
            }
        }
    }
}

 

using System;
using System.Management;

namespace UsbDemo
{
    /// <summary>  
    /// USB控制设备类型  
    /// </summary>  
    public struct ProcessInfo
    {
        /// <summary>  
        /// USB控制器设备ID  
        /// </summary>  
        public String Antecedent;

        /// <summary>  
        /// USB即插即用设备ID  
        /// </summary>  
        public String Dependent;
    }

    class ProcessWatcher
    {
        /// <summary>  
        /// USB插入事件监视  
        /// </summary>  
        private ManagementEventWatcher insertWatcher = null;

        /// <summary>  
        /// USB拔出事件监视  
        /// </summary>  
        private ManagementEventWatcher removeWatcher = null;

        /// <summary>  
        /// 添加USB事件监视器  
        /// </summary>  
        /// <param name="usbInsertHandler">USB插入事件处理器</param>  
        /// <param name="usbRemoveHandler">USB拔出事件处理器</param>  
        /// <param name="withinInterval">发送通知允许的滞后时间</param>  
        public Boolean AddUSBEventWatcher(EventArrivedEventHandler usbInsertHandler, EventArrivedEventHandler usbRemoveHandler, TimeSpan withinInterval)
        {
            try
            {
                ////创建WQL事件查询,用于实例创建
                //var qCreate = new WqlEventQuery("__InstanceCreationEvent",TimeSpan.FromSeconds(1),"TargetInstance ISA \'Win32_Process\'");

                ////创建WQL事件查询,用于实例删除
                //var qDelete = new WqlEventQuery("__InstanceDeletionEvent",TimeSpan.FromSeconds(1), "TargetInstance ISA \'Win32_Process\'");

                ////创建事件查询的侦听器(ManagementEventWatcher)
                //var wCreate = new ManagementEventWatcher(qCreate);
                //var wDelete = new ManagementEventWatcher(qDelete);

                ////事件注册代码
                //wCreate.EventArrived += (sender, e) =>
                //{
                //    Console.WriteLine("运行:{0}", GetInfo(e.NewEvent));
                //};
                //wDelete.EventArrived += (sender, e) =>
                //{
                //    Console.WriteLine("关闭:{0}", GetInfo(e.NewEvent));
                //};

                ////异步开始侦听
                //wCreate.Start();
                //wDelete.Start();

                //Console.WriteLine("按任意键停止监控");
                //Console.ReadKey(true);

                // 进程执行监视  
                if (usbInsertHandler != null)
                {
                    WqlEventQuery InsertQuery = new WqlEventQuery("__InstanceCreationEvent", withinInterval, "TargetInstance ISA \'Win32_Process\'");
                    insertWatcher = new ManagementEventWatcher( InsertQuery);
                    insertWatcher.EventArrived += usbInsertHandler;
                    insertWatcher.Start();
                }

                // 进程结束监视  
                if (usbRemoveHandler != null)
                {
                    WqlEventQuery RemoveQuery = new WqlEventQuery("__InstanceDeletionEvent", withinInterval, "TargetInstance ISA \'Win32_Process\'");
                    removeWatcher = new ManagementEventWatcher( RemoveQuery);
                    removeWatcher.EventArrived += usbRemoveHandler;
                    removeWatcher.Start();
                }
                return true;
            }

            catch (Exception)
            {
                RemoveUSBEventWatcher();
                return false;
            }
        }

        /// <summary>  
        /// 移去USB事件监视器  
        /// </summary>  
        public void RemoveUSBEventWatcher()
        {
            if (insertWatcher != null)
            {
                insertWatcher.Stop();
                insertWatcher = null;
            }

            if (removeWatcher != null)
            {
                removeWatcher.Stop();
                removeWatcher = null;
            }
        }


        //输出事件对应的ManagementBaseObject(本例中的Win32_Process实例)的信息
        static string GetInfo(ManagementBaseObject mobj)
        {
            var instance = (ManagementBaseObject)mobj["TargetInstance"];
            return string.Format("{0} - {1}", instance["Name"], DateTime.Now);
        }

        /// <summary>  
        /// 定位发生插拔的USB设备  
        /// </summary>  
        /// <param name="e">USB插拔事件参数</param>  
        /// <returns>发生插拔现象的USB控制设备ID</returns>  
        public static ProcessInfo[] WhoControllerDevice(EventArrivedEventArgs e)
        {
            ManagementBaseObject instance = e.NewEvent["TargetInstance"] as ManagementBaseObject;
            return new ProcessInfo[1] { new ProcessInfo { Antecedent = instance["Name"].ToString(), Dependent = instance["Name"].ToString() } };
        }

    }
}

 

 http://blog.csdn.net/asciil/article/details/6931429

http://www.cnblogs.com/password1/p/5870751.html

以上是关于c# WMI获取机器硬件信息(硬盘,cpu,内存等)的主要内容,如果未能解决你的问题,请参考以下文章

使用WMI编程获取主机硬件信息(CPU_ID,硬盘主板BIOS序列号,Mac地址)

C#软件注册和认证

VC++如何获取机器码?硬盘序列号、CPU编号、BIOS编号等~

linux下查看cpu,内存,硬盘等硬件信息的方法

linux下查看cpu,内存,硬盘等硬件信息的方法

请问怎么用c语言获取电脑(windows)的cpu,内存,硬盘利用率等信息?Linux系统一样吗?