C#通过WMI获取USB设备信息教程

1星 7 下载量 123 浏览量 更新于2024-08-31 收藏 58KB PDF 举报
"C#通过WMI获取USB设备信息的代码示例" 在Windows操作系统中,管理系统硬件信息和事件的一种常用方法是使用Windows Management Instrumentation(WMI)。C#程序员可以利用.NET Framework提供的ManagementObjectSearcher类来通过WMI查询USB设备的相关信息。本示例详细阐述了如何在C#中使用WMI来获取USB设备的详细数据。 首先,我们需要导入必要的命名空间,包括`System`, `System.Management`, `System.Text.RegularExpressions`和`System.Collections.Generic`。这些命名空间分别提供了基本的数据类型、管理对象操作、正则表达式处理和集合操作等功能。 定义一个名为`PnPEntityInfo`的结构体,用于存储USB设备的基本信息,如设备ID(PNPDeviceID)、设备名称(Name)、设备描述(Description)、服务(Service)、设备状态(Status)、供应商标识(VendorID)、产品编号(ProductID)以及设备安装类GUID(ClassGuid)。 接着,创建一个名为`USB`的类,它包含了获取USB设备信息的方法。在这个类中,有两个主要的方法: 1. `AllUsbDevices`属性:这个静态方法返回所有USB设备的信息。它通过调用`WhoUsbDevice`方法,传递最小值(`UInt16.MinValue`)作为VendorID和ProductID的参数,表示查询所有USB设备,而不论其供应商标识和产品编号。 2. `WhoUsbDevice`方法:这是一个重载方法,接受VendorID、ProductID和ClassGuid作为参数。它可以根据指定条件筛选USB设备,返回符合特定条件的USB设备信息数组。如果VendorID或ProductID为`UInt16.MinValue`,则不进行相应筛选;如果ClassGuid为空(`Guid.Empty`),则忽略设备安装类的筛选。 在`WhoUsbDevice`方法中,主要步骤包括: - 创建一个ManagementObjectSearcher对象,设置其查询范围为WMI的Win32_PnPEntity类,这是包含所有即插即用设备信息的类。 - 使用一个ManagementObjectCollection对象来存储查询结果。 - 遍历查询结果,对每个设备进行处理: - 检查设备是否为USB设备,这通常通过检查设备的ClassGuid是否与USB设备的ClassGuid匹配来实现。 - 如果设备是USB设备并且满足VendorID和ProductID的条件,就创建一个`PnPEntityInfo`实例,并填充相关信息。 - 最后,将所有符合条件的设备信息添加到一个`PnPEntityInfo`数组中并返回。 这个示例代码不仅可以帮助开发者获取USB设备的基本信息,还可以作为查询其他类型设备信息的基础,只需调整查询条件和筛选逻辑即可。在实际项目中,这样的功能可能被用于设备监控、设备管理和日志记录等场景。