在 Windows 中枚举连接的 USB 设备
获取连接到 Windows 计算机的 USB 设备的完整列表对于系统监控、硬件管理和调试至关重要。为此,利用 Windows 管理规范 (WMI) 提供了一个强大的解决方案。
利用 System.Management 命名空间
首先,在项目中包含对 System.Management 的引用。此命名空间使您的代码能够与 WMI 交互,WMI 是查询系统信息的关键组件。
查询 USB 集线器设备
识别 USB 设备的关键在于查询 Win32_USBHub 实例。这些对象代表 USB 总线层次结构上的物理或虚拟集线器,提供有关已连接设备的详细信息。
查询设备属性
获得 USBHub 对象列表后,您可以继续查询其属性值,例如 DeviceID、PNPDeviceID(唯一的硬件标识符)和 Description(用户可读的设备名称)。
填充 USBDeviceInfo 类
为了组织检索到的数据,请考虑创建一个名为 USBDeviceInfo 的自定义类。此类应包含 DeviceID、PnpDeviceID 和 Description 的属性,使您能够封装重要的设备属性。
提取设备信息
实例化 USBDeviceInfo 类,并通过从集合中的每个 USBHub 对象提取相应数据来填充其属性。这使您可以构建所有检测到的 USB 设备的结构化列表。
代码示例
以下代码片段提供了一个说明性示例,说明如何在 C# 中检索和处理 USB 设备信息:
<code class="language-csharp">using System; using System.Collections.Generic; using System.Management; namespace USBDeviceEnumerator { class Program { static void Main(string[] args) { var usbDevices = GetUSBDevices(); foreach (var usbDevice in usbDevices) { Console.WriteLine( $"设备 ID:{usbDevice.DeviceID},PNP 设备 ID:{usbDevice.PnpDeviceID},描述:{usbDevice.Description}"); } Console.ReadKey(); } static List<USBDeviceInfo> GetUSBDevices() { List<USBDeviceInfo> devices = new List<USBDeviceInfo>(); using var searcher = new ManagementObjectSearcher( @"Select * From Win32_USBHub"); using ManagementObjectCollection collection = searcher.Get(); foreach (var device in collection) { devices.Add(new USBDeviceInfo( (string)device.GetPropertyValue("DeviceID"), (string)device.GetPropertyValue("PNPDeviceID"), (string)device.GetPropertyValue("Description") )); } return devices; } } class USBDeviceInfo { public USBDeviceInfo(string deviceID, string pnpDeviceID, string description) { DeviceID = deviceID; PnpDeviceID = pnpDeviceID; Description = description; } public string DeviceID { get; private set; } public string PnpDeviceID { get; private set; } public string Description { get; private set; } } }</code>
通过利用 WMI 并遵循这些步骤,您可以有效地提取和枚举连接到 Windows 计算机的 USB 设备,为您提供一种可靠的方法来监控和管理 USB 硬件。
以上是如何在 Windows 中以编程方式枚举已连接的 USB 设备?的详细内容。更多信息请关注PHP中文网其他相关文章!