如何在 Windows 中以编程方式枚举已连接的 USB 设备?
在 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 设备信息:
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; } } }
通过利用 WMI 并遵循这些步骤,您可以有效地提取和枚举连接到 Windows 计算机的 USB 设备,为您提供一种可靠的方法来监控和管理 USB 硬件。
以上是如何在 Windows 中以编程方式枚举已连接的 USB 设备?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

C#和C 的历史与演变各有特色,未来前景也不同。1.C 由BjarneStroustrup在1983年发明,旨在将面向对象编程引入C语言,其演变历程包括多次标准化,如C 11引入auto关键字和lambda表达式,C 20引入概念和协程,未来将专注于性能和系统级编程。2.C#由微软在2000年发布,结合C 和Java的优点,其演变注重简洁性和生产力,如C#2.0引入泛型,C#5.0引入异步编程,未来将专注于开发者的生产力和云计算。

C#和C 的学习曲线和开发者体验有显着差异。 1)C#的学习曲线较平缓,适合快速开发和企业级应用。 2)C 的学习曲线较陡峭,适用于高性能和低级控制的场景。

静态分析在C 中的应用主要包括发现内存管理问题、检查代码逻辑错误和提高代码安全性。1)静态分析可以识别内存泄漏、双重释放和未初始化指针等问题。2)它能检测未使用变量、死代码和逻辑矛盾。3)静态分析工具如Coverity能发现缓冲区溢出、整数溢出和不安全API调用,提升代码安全性。

C 通过第三方库(如TinyXML、Pugixml、Xerces-C )与XML交互。1)使用库解析XML文件,将其转换为C 可处理的数据结构。2)生成XML时,将C 数据结构转换为XML格式。3)在实际应用中,XML常用于配置文件和数据交换,提升开发效率。

使用C 中的chrono库可以让你更加精确地控制时间和时间间隔,让我们来探讨一下这个库的魅力所在吧。C 的chrono库是标准库的一部分,它提供了一种现代化的方式来处理时间和时间间隔。对于那些曾经饱受time.h和ctime折磨的程序员来说,chrono无疑是一个福音。它不仅提高了代码的可读性和可维护性,还提供了更高的精度和灵活性。让我们从基础开始,chrono库主要包括以下几个关键组件:std::chrono::system_clock:表示系统时钟,用于获取当前时间。std::chron

C 的未来将专注于并行计算、安全性、模块化和AI/机器学习领域:1)并行计算将通过协程等特性得到增强;2)安全性将通过更严格的类型检查和内存管理机制提升;3)模块化将简化代码组织和编译;4)AI和机器学习将促使C 适应新需求,如数值计算和GPU编程支持。

1)c relevantduetoItsAverity and效率和效果临界。2)theLanguageIsconTinuellyUped,withc 20introducingFeaturesFeaturesLikeTuresLikeSlikeModeLeslikeMeSandIntIneStoImproutiMimproutimprouteverusabilityandperformance.3)

C#使用自动垃圾回收机制,而C 采用手动内存管理。1.C#的垃圾回收器自动管理内存,减少内存泄漏风险,但可能导致性能下降。2.C 提供灵活的内存控制,适合需要精细管理的应用,但需谨慎处理以避免内存泄漏。
