我正在开发一个需要获取的应用程序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 如何对硬件进行分类的知识。