c++ - 将 HID 触摸设备与 Pnp 监视器相关联

标签 c++ windows hid touchscreen

我正在开发一种工具,用于显示我们在工作中使用的系统上各种硬件组件的状态。目前,我们有 16 个触摸屏显示器(全部由 3M 提供)插入 Windows 10 盒子。我需要验证任何给定的显示器是否具有 Windows 识别的关联触摸屏。这是为了评估系统是否存在任何硬件故障,即电缆损坏、USB 端口损坏、显示器损坏等。我们看到这种情况的次数比我们愿意承认的要多,通常情况下显示器的显示屏可以正常工作,但两端的 USB Controller 退出并需要通过拔出/重新插入来重置

不幸的是,由于工作限制,我的代码发布将受到限制。

我可以通过 winapi 的 EnumDisplayDevices 枚举所有插入系统的监视器。和 EnumerateDisplayMonitors .我能够使用 HIDApi 构建所有 HID 触摸屏设备的列表。 .

从这里开始,我不知道去哪里将这两件事联系在一起,如果可能的话。我的第一个想法是 HID 设备信息应该具有某种由调用 EnumDisplayDevices 和 EnumerateDisplayMonitors 的结果共享的标识符,但我没有发现这种情况。另一种可能性是将监视器的坐标/大小与其中一个触摸 Controller 负责的区域进行比较。同样,不确定这是否可能。

简而言之,有没有办法通过 C++ 将 Touch 设备与其对应的显示器相关联?

最佳答案

我认为您很幸运,该驱动程序后缀与您的显示器配置相匹配。在我的 Windows 10 多显示器设置中,当我按照您的描述在驱动程序条目中使用此编号查找它们时,显示错误。

将 HID 设备与显示器相关联的可靠方法似乎是:

  1. 调用GetRawInputDeviceList()获取HID设备
  2. 使用 RIDI_DEVICEINFO 调用 GetRawInputDeviceInfo() 以确定UsageUsagePage
  3. 使用 RIDI_DEVICENAME 调用 GetRawInputDeviceInfo() 以获取 \\\\?\\HID#VID_0EEF&PID_7200&Col01#6&152cc7f9&1&0000#{4d1e55b2- 形式的设备字符串f16f-11cf-88cb-001111000030}
  4. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wisp\Pen\Digimon 查询映射表的注册表并查找显示设备名称。在我的例子中,HID 名称都以 20- 为前缀,但其余部分似乎与 GetRawInputDeviceInfo() 查询的名称完全匹配。作为万一没有匹配项的后备方法,我还按照 Clay Brooks 在他的回答中描述的那样解析中间部分。
  5. 在循环中调用 EnumDisplayDevices()lpDevice 为空指针,dwFlags 为 0,直到函数返回零。
  6. 在每次循环迭代中,再次调用 EnumDisplayDevices() 并将当前设备作为 lpDevice 并为 dwFlags 调用 EDD_GET_DEVICE_INTERFACE_NAME > 并观察它以 \\\\?\\DISPLAY#ELO2243#5&607b301&0&UID24833#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7} 形式返回 DeviceID/li>
  7. 循环直到找到 HID <-> 显示匹配,然后获取“外部”EnumDisplayDevices() 调用返回的 DeviceName,它应该类似于 \\.\DISPLAY3

关于c++ - 将 HID 触摸设备与 Pnp 监视器相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42215120/

相关文章:

c++ - 在 IDE 中检测硬盘驱动器

c++ - Qt Widgets 和派生类

windows - Vista/7 的 OpenGL 最多 32 个屏幕窗口

java - 在java中为系统托盘创建单个实例

c++ - C 中的打开函数表示无法打开设备 : permission denied

keyboard - HID 设备可以接收哪些数据?

c++ - Qt debian/ubuntu : Can't compile, 错误:找不到-lGL

c++ - 我用于测量上下文切换时间的 C++ 代码是否正确?

windows - 如何在IFileDialog中更改Places的图标和文本(“Application Links”)?

javascript - HIdDevice.fromIdAsync 始终返回 null