zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    腾讯新闻评论数据爬取
    腾讯新闻评论数据爬取
    腾讯新闻评论数据爬取
    Storm系统架构以及代码结构学习
    Storm系统架构以及代码结构学习
    Storm系统架构以及代码结构学习
    网络新闻评论观点挖掘系统实现
    网络新闻评论观点挖掘系统实现
    网络新闻评论观点挖掘系统实现
    Confluence 6 配置验证码(Captcha)来防止垃圾
  • 原文地址:https://www.cnblogs.com/chen110xi/p/6189499.html
Copyright © 2011-2022 走看看