首页 > 后端开发 > C++ > 如何在 Windows 中以编程方式枚举已连接的 USB 设备?

如何在 Windows 中以编程方式枚举已连接的 USB 设备?

Mary-Kate Olsen
发布: 2025-01-25 00:42:09
原创
239 人浏览过

How Can I Programmatically Enumerate Connected USB Devices in Windows?

在 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板