当插入一个 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 对应的。我们在代码中如何得到这个总线关系?
* 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 对应的。我们在代码中如何得到这个总线关系?
如果 PC 上只插入了一个 HID 设备,当然可以知道二者是对应的。但是,如果插入了多个设备,除非动态监测,就无法确定一一对应的关系了。因为上面代码枚举出的设备,并非顺序对应的。不过我可能解释得多余了。没有接触过的朋友,即使看懂了问题,八成还是无法解决。如果解决过这类问题,一看便知。多个 PID/VID 相同的 HID 设备,如何确定其路径(port),一直是一个问得很多的问题,包括国外的网站上。我目前还没有找到答案。
美女又在研究什么高难度项目,我也没解决过这类问题!