C# 学习笔记(三)----- 设备监视 ( System.Management )
2018-01-19 16:36
309 查看
实例:串口监视
附录:WMI(转载)
补充:在Windows有一个自带的WQL测试工具,在“运行”里输入wbemtest即可打开
详细方法参阅http://blog.csdn.net/zhoufoxcn/article/details/2044246
1) ManagementEventWatcher 类
订阅基于指定的事件查询临时事件通知。
2) WqlEventQuery 类
表示WQL格式WMI事件查询。
3) ManagementBaseObject 类
包含管理对象的基本元素。 它用作更具体的管理对象类的基类。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Management; namespace Watcher { class GetPorts //串口监视 { private ManagementEventWatcher watcher;//设备事件监视 public void AddPortWatcher(EventArrivedEventHandler eventHandle)//添加监视器 { try { if (eventHandle != null) { WqlEventQuery query = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), "TargetInstance isa 'Win32_PnPEntity'"); watcher = new ManagementEventWatcher(query); watcher.EventArrived += eventHandle; watcher.Start(); } } catch (Exception e) { RemovePortWatcher(); } } public void RemovePortWatcher()//移除监视器 { if (watcher != null) { watcher.Stop(); watcher = null; } } //定位触发事件的设备 public string GetSerialPort(EventArrivedEventArgs e) { ManagementBaseObject mboj = e.NewEvent["TargetInstance"] as ManagementBaseObject; if (mboj != null && mboj.ClassPath.ClassName == "Win32_PnPEntity") { string serialPort = (mboj["Name"] as string).Replace(")", "").Split(new char[] { '(' })[1]; return serialPort; } return null; } } }
附录:WMI(转载)
/// <summary> /// 枚举win32 api /// </summary> public enum HardwareEnum { // 硬件 Win32_Processor, // CPU 处理器 Win32_PhysicalMemory, // 物理内存条 Win32_Keyboard, // 键盘 Win32_PointingDevice, // 点输入设备,包括鼠标。 Win32_FloppyDrive, // 软盘驱动器 Win32_DiskDrive, // 硬盘驱动器 Win32_CDROMDrive, // 光盘驱动器 Win32_BaseBoard, // 主板 Win32_BIOS, // BIOS 芯片 Win32_ParallelPort, // 并口 Win32_SerialPort, // 串口 Win32_SerialPortConfiguration, // 串口配置 Win32_SoundDevice, // 多媒体设置,一般指声卡。 Win32_SystemSlot, // 主板插槽 (ISA & PCI & AGP) Win32_USBController, // USB 控制器 Win32_NetworkAdapter, // 网络适配器 Win32_NetworkAdapterConfiguration, // 网络适配器设置 Win32_Printer, // 打印机 Win32_PrinterConfiguration, // 打印机设置 Win32_PrintJob, // 打印机任务 Win32_TCPIPPrinterPort, // 打印机端口 Win32_POTSModem, // MODEM Win32_POTSModemToSerialPort, // MODEM 端口 Win32_DesktopMonitor, // 显示器 Win32_DisplayConfiguration, // 显卡 Win32_DisplayControllerConfiguration, // 显卡设置 Win32_VideoController, // 显卡细节。 Win32_VideoSettings, // 显卡支持的显示模式。 // 操作系统 Win32_TimeZone, // 时区 Win32_SystemDriver, // 驱动程序 Win32_DiskPartition, // 磁盘分区 Win32_LogicalDisk, // 逻辑磁盘 Win32_LogicalDiskToPartition, // 逻辑磁盘所在分区及始末位置。 Win32_LogicalMemoryConfiguration, // 逻辑内存配置 Win32_PageFile, // 系统页文件信息 Win32_PageFileSetting, // 页文件设置 Win32_BootConfiguration, // 系统启动配置 Win32_ComputerSystem, // 计算机信息简要 Win32_OperatingSystem, // 操作系统信息 Win32_StartupCommand, // 系统自动启动程序 Win32_Service, // 系统安装的服务 Win32_Group, // 系统管理组 Win32_GroupUser, // 系统组帐号 Win32_UserAccount, // 用户帐号 Win32_Process, // 系统进程 Win32_Thread, // 系统线程 Win32_Share, // 共享 Win32_NetworkClient, // 已安装的网络客户端 Win32_NetworkProtocol, // 已安装的网络协议 Win32_PnPEntity,//all device } /// <summary> /// WMI取硬件信息 /// </summary> /// <param name="hardType"></param> /// <param name="propKey"></param> /// <returns></returns> public static string[] MulGetHardwareInfo(HardwareEnum hardType, string propKey) { List<string> strs = new List<string>(); try { using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + hardType)) { var hardInfos = searcher.Get(); foreach (var hardInfo in hardInfos) { if (hardInfo.Properties[propKey].Value.ToString().Contains("COM")) { strs.Add(hardInfo.Properties[propKey].Value.ToString()); } } searcher.Dispose(); } return strs.ToArray(); } catch { return null; } finally { strs = null; } } //通过WMI获取COM端口 string[] ss = MulGetHardwareInfo(HardwareEnum.Win32_PnPEntity, "Name");
补充:在Windows有一个自带的WQL测试工具,在“运行”里输入wbemtest即可打开
详细方法参阅http://blog.csdn.net/zhoufoxcn/article/details/2044246
System.Management 命名空间
提供对一组丰富的管理信息和管理事件(它们是关于符合 Windows Management Instrumentation (WMI) 基础结构的系统、设备和应用程序的)的访问。 应用程序和服务可以使用从 ManagementObjectSearcher 和 ManagementQuery 派生的类,查询感兴趣的管理信息(例如在磁盘上还剩多少可用空间、当前 CPU 利用率是多少、某一应用程序正连接到哪一数据库等等);或者应用程序和服务可以使用 ManagementEventWatcher 类预订各种管理事件。 这些可访问的数据可以来自分布式环境中托管的和非托管的组件。1) ManagementEventWatcher 类
订阅基于指定的事件查询临时事件通知。
2) WqlEventQuery 类
表示WQL格式WMI事件查询。
3) ManagementBaseObject 类
包含管理对象的基本元素。 它用作更具体的管理对象类的基类。
相关文章推荐
- WMI009-WMI学习笔记(九)——System.Management and System.Management.Instrumentation Namespaces(命名空间)
- (原创)c#学习笔记09--定义类02--System.Object
- 关于SQL中,C#监视某张表SqlDependency学习笔记 .
- C# Infralution Licensing System学习笔记(二)网页程式Licensing应用
- 我的C#学习笔记(2)――字符串
- C#回顾学习笔记十六:out、ref和params参数
- 【C#】学习笔记
- C# 学习笔记
- 【Matlab Computer Vision System ToolBox】学习笔记-1-点云配准流程 | 特征匹配
- C#学习笔记——多维数组与交错数组的区别
- (原创)c#学习笔记05--变量的更多内容02--复杂的类型变量02--结构
- C#寒假学习笔记(3)
- C# 2008 学习笔记 - LINQ to XML
- 40、我的C#学习笔记6
- 【C#学习笔记2】C#面向对象相关知识
- 学习笔记 --- LINUX I2C设备驱动的实现
- Java学习笔记--System.out.println();
- C#寒假学习笔记(4)
- 学习C#笔记(刚刚学的一小部分)