【发布时间】:2017-02-13 23:04:23
【问题描述】:
我正在开发一种工具,用于显示我们在工作中使用的系统上各种硬件组件的状态。目前,我们有 16 个触摸屏显示器(全部由 3M 提供)插入 Windows 10 盒子。我需要验证任何给定的显示器是否具有被 Windows 识别的关联触摸屏。这是为了评估系统是否存在任何硬件故障,例如电缆损坏、USB 端口损坏、显示器损坏等。我们看到的比我们愿意承认的要多,通常显示器的显示器可以正常工作,但两端的 USB 控制器退出并需要通过拔出/重新插入来重置
很遗憾,由于工作限制,我的代码发布将受到限制。
我可以枚举通过winapi的EnumDisplayDevices和EnumerateDisplayMonitors插入系统的所有监视器。我可以使用HIDApi 构建所有 HID 触摸屏设备的列表。
如果可能的话,我不知道从哪里可以将这两件事联系在一起。我的第一个想法是 HID 设备信息应该具有某种由调用 EnumDisplayDevices 和 EnumerateDisplayMonitors 的结果共享的标识符,但我没有发现这种情况。另一种可能性是将监视器的坐标/大小与一个触摸控制器负责的区域进行比较。同样,不确定这是否可能。
简而言之,有没有办法通过 c++ 将 Touch 设备与其对应的监视器关联起来?
【问题讨论】:
-
我不是这方面的专家,但在 GitHub 上查看 HIDApi 的源代码时,我注意到它使用 SetupDiEnumDeviceInterfaces 调用来枚举 HID 设备。不能使用相同的 API 来检索监视器吗?使用不同的 InterfaceClassGuid ?
-
我搞砸了 HIDApi,并能够根据您的建议生成监视器列表@Steeve。我通过这种方式获得了与 EnumerateDisplayMonitors 和 EnumDisplayDevices 相同的信息。问题仍然是如何验证给定的 Touch 设备对应于显示设备。 Device Installation Functions 毛茸茸的。在设备路径、VID 和 PID 之外,是否还有另一个我应该寻找的标识符?
-
环顾四周(例如this 答案)对我来说似乎是Windows 进行了关联,理论上您也可以将输入重新分配给另一个显示器...无论如何看看答案,有一个这表示关联存储在
HKLM/Software/Microsoft/Wisp下的注册表中。可能会有所帮助。 -
@Steeve,看起来这将是解决方案。谢谢!!
标签: c++ windows hid touchscreen