当插入一个 HID 设备时,设备管理器中会出现一对:* HID-comlian device
* USB 人体学输入设备当插入多个 HID 设备时,就会出现多对。通过以下代码可以列举所有的 DeviceID:
Set wmi = GetObject("winmgmts:\\.\root\cimv2")
Set usb = wmi.execquery("select * from Win32_PnPEntity where name='HID-compliant device'")If usb.Count > 0 Then
    For Each item In usb
        Debug.Print  item.Name, item.DeviceID
    Next
End IfSet usb = wmi.execquery("select * from Win32_PnPEntity where name='USB 人体学输入设备'")If usb.Count > 0 Then
    For Each item In usb
        Debug.Print  item.Name, item.DeviceID
    Next
End IfHID-compliant device        HID\VID_4853&PID_084B\6&25325897&0&0000
USB 人体学输入设备          USB\VID_4853&PID_084B\5&FF9BDDE&0&2如上就是同一设备的两个 ID。请问,如何找到两两对应的关系?在设备管理器中,“USB 人体学输入设备”对话框“详细信息”属性页中,有“总线关系”= HID\Vid_4853&Pid_084b\6&25325897&0&0000
显然是与 HID-compliant device 的 DeviceID 对应的。我们在代码中如何得到这个总线关系?

解决方案 »

  1.   

    其实没看明白楼主想问什么,那个“总线关系”你上面不是在HID-compliant device得到了吗
      

  2.   


    如果 PC 上只插入了一个 HID 设备,当然可以知道二者是对应的。但是,如果插入了多个设备,除非动态监测,就无法确定一一对应的关系了。因为上面代码枚举出的设备,并非顺序对应的。不过我可能解释得多余了。没有接触过的朋友,即使看懂了问题,八成还是无法解决。如果解决过这类问题,一看便知。多个 PID/VID 相同的 HID 设备,如何确定其路径(port),一直是一个问得很多的问题,包括国外的网站上。我目前还没有找到答案。
      

  3.   

    这组WMI我是用过的啊,我只是不明白你的意图。你可以考虑换个描述方法,没准我们就理解了:)
      

  4.   

    好。我插入了 8 个 HID 设备,因此,可以用 WMI 得到 8 个 HID-comlian device 的 Device ID 和 8 个人体学输入设备的 Device ID。我如果得知这 16 个 Device ID 之间一一对应的关系?实际上,我是希望在软件界面上向使用者图形显示他插入到 USB Hub 中的设备的处理情况。哪一个处理完了,他可以拔出。再插入新的设备。人体学输入设备的 Device ID 是能够反映出所插入的 HID Port 的。而我通过 DLL 中的 SetupDiGetClassDevs, SetupDiEnumDeviceInterfaces 和 SetupDiGetDeviceInterfaceDetail 得到并用于 CreateFile 的设备路径,是含有 HID-comlian device 的 Device ID 信息的("\\?\hid#vid_4853&pid_084b#6&25325897&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}")。我希望通过人体学输入设备的 Device ID 获知 Hub port,对应到 DLL 的设备路径。
      

  5.   

    我看明白了.插入一个设备时,会得到一个 HID-comlian device 设备 与一个 人体学输入设备.因此在仅有一个设备时,能得到它们的对应关系.但需要在插入多个设备时,分别获取各自的对应关系,对吧?
      

  6.   

    WMI这段代码很精炼。
    美女又在研究什么高难度项目,我也没解决过这类问题!