USb Root Hub 和 USB 复合设备之间有什么区别?

USb Root Hub 和 USB 复合设备之间有什么区别?

我正在开发一个需要获取的应用程序VID 和 PID连接到计算机的所有当前 USB 设备。

但是我只获取了连接到计算机的耳机的 VID 和 PID 号码,而没有获取鼠标和键盘的 VID 和 PID 号码。

我的代码工作如下:-

static List<USBDeviceInfo> GetUSBDevices()
    {
        List<USBDeviceInfo> devices = new List<USBDeviceInfo>();

        ManagementObjectCollection collection;
        using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_USBHub"))
            collection = searcher.Get();

        foreach (var device in collection)
        {
            devices.Add(new USBDeviceInfo(
            (string)device.GetPropertyValue("DeviceID"),
            (string)device.GetPropertyValue("PNPDeviceID"),
            (string)device.GetPropertyValue("Description")
            ));
        }

        collection.Dispose();
        return devices;
    }

主类

static void Main(string[] args)
    {
       var usbDevices = GetUSBDevices();
       foreach (var usbDevice in usbDevices)
       {
        Console.WriteLine("Device ID: {0}, PNP Device ID: {1}, Description: {2}",
         usbDevice.DeviceID, usbDevice.PnpDeviceID, usbDevice.Description);
       }
      Console.Read();
     }

现在的情况是耳机我得到的描述是USB 复合设备而在其他设备连接到计算机的情况下,我得到的描述是USB 根集线器

我不知道为什么我只得到了耳机的 VID 和 PID

请建议

提前致谢。!!

答案1

A中心是其他设备连接到的设备。根集线器代表主板上的 USB 控制器。

A复合装置是一种具有多个接口的设备;您的耳机有两个接口,用于混音器控制和用于音频捕获。

常规 USB 设备未列为Win32_USBHub,您必须查看Dependent条目。请参阅使用 WMI 获取 USB 设备信息举个例子。

答案2

我不涉及这个问题的编码部分 - 这对 SU 来说是 OT。反正我不会编码

真正的问题是,你可能看错了地方

首先,查看设备管理器。

这是我的。我把不太有趣的部分涂黑了,并指出了有用的东西在此处输入图片描述

我的游戏鼠标是 USB 复合设备 - 它由两个虚拟设备组成(在这种情况下,我假设它是 USB 耳机。否则它根本不会出现)。因此,它出现在 3 个地方 - HID 下、键盘下以及鼠标和其他指点设备下,并作为 USB 控制器出现。

我的键盘仅出现在 HID 和键盘下,因为它是一款无聊、毫无魅力的罗技设备。它不应该出现在 USB 控制器下。

简而言之?您可以重新查看代码,并了解一些有关 Windows 如何对硬件进行分类的知识。

相关内容