ELAN 触摸板驱动程序造成 Win10 系统 API 错误导致 LWJGL 游戏(比如 Minecraft)里面依赖于某些 API 的场所无法识别出鼠标中键

2017-05-29 15:21:41 +08:00
 coronanimo
起因是买了一个 Gigabyte Aero 15 想要用来玩游戏,因为没什么时间玩,所以理所应当的就变成了测试游戏。

测试的时候突然发现一个问题,外接 G502 的鼠标中键在 LWJGL2 的一个应用里面没有反应。

查了一下代码,发现 InventoryTweaks 用到了 LWJGL 2 里面的
org.lwjgl.input.Mouse.isButtonDown(2) 其中 2 代表鼠标中键

自己写了一个 LWJGL2 程序,发现的确是捕捉不到中键

然后调用 org.lwjgl.input.Mouse.getButtonCount 发现返回值是 2,也就是说认为这个鼠标只有两个键,这怎么可能呢?鼠标明明有 5 个键。

这个值是怎么来的呢?经过进一步排查,发现是 JNI 包装了 Win32API 的 GetSystemMetrics(SM_CMOUSEBUTTONS)这个方法,这个方法返回值为 2。

然后就是尝试怎么解决了,首先禁用触摸板、不行。升级鼠标驱动、不行。卸载触摸板驱动程序使其识别为 PS/2 兼容鼠标,这下可以了。但是触摸板的功能也就没有了。

去网上下了各种触摸板的驱动,都无法找到合理的解决方案,感觉似乎是 ELAN Driver 的问题,不知道有没有同样是 ELAN 触摸板的同学是否可以查看一下 Win32API 是否在外接任意鼠标的情况下都返回 2 这个值。(按理来说应该返回大的才是)

另外感觉 LWJGL2 也是坑爹。。。用这个 API 获取鼠标键的数量,然后还用其定义了接下来的鼠标事件缓冲区大小。。。

给 ELAN 台湾写了信,估计也没有人回复了。
2228 次点击
所在节点    程序员
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/364586

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX