再问:HID-comlian device 和 USB 人体学输入设备

of123 2013-06-21 02:24:26
当插入一个 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 If

Set 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 If

HID-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 对应的。

我们在代码中如何得到这个总线关系?

...全文
1962 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Errorize 2015-07-29
  • 打赏
  • 举报
回复
本帖子年代久远,不能再回复!
of123 2013-07-02
  • 打赏
  • 举报
回复
再等待一天。
of123 2013-07-02
  • 打赏
  • 举报
回复
没有没有。真心讨教。
贝隆 2013-07-02
  • 打赏
  • 举报
回复 1
你不是在提问,你是在考我们。
东方之珠 2013-07-02
  • 打赏
  • 举报
回复
WMI这段代码很精炼。 美女又在研究什么高难度项目,我也没解决过这类问题!
of123 2013-06-28
  • 打赏
  • 举报
回复
谢谢帮顶。 等待熟悉 Windows 机制的高人。 我目前退一步的方案,是程序启动后才允许插入多个设备。这样通过 OnDeviceChange 消息就可以动态地逐一查出新设备两个 ID 的对应关系(找出未记录的“人体学输入设备”Device ID 和“HID-comlian device” ID,就必然是一对)。 如果能解决获取“总线关系”的方法,则可以“静态”解析程序启动时已经插入的多个设备的 Port 对应关系了。
嗷嗷叫的老马 2013-06-27
  • 打赏
  • 举报
回复
帮顶一下,嘿嘿....不会
嗷嗷叫的老马 2013-06-27
  • 打赏
  • 举报
回复
我看明白了. 插入一个设备时,会得到一个 HID-comlian device 设备 与一个 人体学输入设备. 因此在仅有一个设备时,能得到它们的对应关系. 但需要在插入多个设备时,分别获取各自的对应关系,对吧?
of123 2013-06-25
  • 打赏
  • 举报
回复
好。 我插入了 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 的设备路径。
bcrun 2013-06-25
  • 打赏
  • 举报
回复
这组WMI我是用过的啊,我只是不明白你的意图。你可以考虑换个描述方法,没准我们就理解了:)
bcrun 2013-06-24
  • 打赏
  • 举报
回复
其实没看明白楼主想问什么,那个“总线关系”你上面不是在HID-compliant device得到了吗
of123 2013-06-24
  • 打赏
  • 举报
回复
引用 2 楼 bcrun 的回复:
其实没看明白楼主想问什么,那个“总线关系”你上面不是在HID-compliant device得到了吗
如果 PC 上只插入了一个 HID 设备,当然可以知道二者是对应的。但是,如果插入了多个设备,除非动态监测,就无法确定一一对应的关系了。因为上面代码枚举出的设备,并非顺序对应的。 不过我可能解释得多余了。没有接触过的朋友,即使看懂了问题,八成还是无法解决。如果解决过这类问题,一看便知。多个 PID/VID 相同的 HID 设备,如何确定其路径(port),一直是一个问得很多的问题,包括国外的网站上。我目前还没有找到答案。
  • 打赏
  • 举报
回复
坐等楼下解答

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧