这是一个创建于 2745 天前的主题,其中的信息可能已经有所发展或是发生改变。
起因是买了一个 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 台湾写了信,估计也没有人回复了。