按VID和PID查找USB设备不起作用

时间:2019-11-20 16:58:39

标签: c# uwp usb

根据此documentation,我应该能够基于供应商ID和产品ID检索USB设备,它还提供了一些额外的信息:

  

物理设备的供应商和产品标识符。这些标识符是硬件ID字符串的一部分。您可以从INF文件的“模型”部分中获取该字符串。或者,如果基于设备描述符中指定的兼容ID加载了WinUSB,则可以从“设备管理器”中的“硬件ID”属性中获取标识符。例如,如果硬件ID为“ USB \ VID_045E&PID_078E”,则供应商ID为“ 0x045E”,产品ID为“ 0x078E”。

所以我查找了USB硬件ID:

enter image description here

然后我使用以下代码:

private async Task<bool> IsDeviceConnected()
{
    uint vid = 0x0529;
    uint pid = 0x0620;
    var deviceSelector = UsbDevice.GetDeviceSelector(vid,pid);
    var allDevices = await DeviceInformation.FindAllAsync();
    var listDevices = allDevices.ToList();
    foreach (var item in listDevices)
    {
        Debug.WriteLine($"{item.Name} - ID: {item.Id}");
    }
    var deviceCollection = (await DeviceInformation.FindAllAsync(deviceSelector)).ToList();
    if (deviceCollection.Any())
    {
        return true;
    }
    return false;
}

所有设备的迭代确实提供了我要寻找的设备的信息,尽管名称稍有不同:

  

令牌JC-ID:\?\ USB#VID_0529&PID_0620#6&13f4c3e&0&2#{894a7461-a033-11d2-821e-444553540000}

     

令牌JC-ID:\?\ USB#VID_0529&PID_0620#6&13f4c3e&0&2#{a6d4c357-c4b7-4dd9-85b7-2bf335618e8e}

     

令牌JC-ID:\?\ USB#VID_0529&PID_0620#6&13f4c3e&0&2#{a5dcbf10-6530-11d2-901f-00c04fb951ed}

deviceSelector输出:

  

System.Devices.InterfaceClassGuid:=“ {DEE824EF-729B-4A0E-9C14-B7117D33A817}” AND System.Devices.InterfaceEnabled:= System.StructuredQueryType.Boolean#True AND System.DeviceInterface.WinUsb.UsbVendorId:= 1321 AND System.DeviceInterface.WinUsb.UsbProductId:= 1568

我也尝试了另一台设备(麦克风),但是通过供应商ID和产品ID都找不到。我在做什么错了?

我注意到deviceSelector查询中的GUID与以上任何GUID不匹配,也不与设备属性中列出的“ Class Guid”匹配,即:{36fc9e60-c465-11cf-8056-444553540000}。

不确定是否相关,但这在UWP应用程序环境中。

0 个答案:

没有答案