V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
coronanimo
V2EX  ›  程序员

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

  •  
  •   coronanimo · 2017-05-29 15:21:41 +08:00 · 2358 次点击
    这是一个创建于 2739 天前的主题,其中的信息可能已经有所发展或是发生改变。
    起因是买了一个 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 台湾写了信,估计也没有人回复了。
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3450 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 00:42 · PVG 08:42 · LAX 16:42 · JFK 19:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.