最近入手了一台GPD WIN5。使用官方的WinContols来设置背键时,发现这个背键的设置逻辑有些奇怪,它是一个宏按键,当按下时会触发由WinControls设置好的按键序列来实现宏的效果。但大多数时候我们还是希望背键只是单纯映射成单个按键,那么我们可以按下面设置。

问题来了,这样设置实际上还是一个宏效果,当背键长按时依旧会出现类似连发或者断触的效果,甚至有时候轻按一下也会输出多次按键的情况。
通过查阅多方资料,这个竟然是硬件层面的设计问题,这就很离谱,只能等官方解决。但这个问题还是个陈年老BUG,GPD系列的掌机一直沿用了这个设计,多年来一直未解决。
那就只能自己动手了。
本来我的想法是做一个过滤驱动通过“防抖”算法,来拦截背键的按键事件将连发信号转换成长按信号。经过一番研究,通过全局键盘钩子发现这两颗背键在WinControls中将其设置成NC时,也能输出按键值。L4对应F14,R4对应F15 (F13-F24也是标准键盘按键,很少用到,基本按下不会有什么作用,很适合拿来做映射中间键)。经过进一步测试,这个NC状态下,长按居然不断触不输出连发信号了!
至此问题就迎刃而解,也不需要写过滤驱动了。与其他手柄背键方案一样,GPD的背键也是在系统设备中生成了一个虚拟键盘设备Microsoft USB Internet Keyboard,当背键映射键盘按键时,由这个虚拟键盘输出,那么我们可以重新映射这个虚拟键盘的输出来达到映射和自定义背键的目的。
-------------------------------------------------------------------------------------------------------
讲完原理,下面以reWASD为例,来映射背键和手柄。如果觉得reWASD太麻烦的,参照以上原理用其他任意可以映射键盘按键的软件实现。
在reWASD中先将手柄和虚拟键盘Microsoft USB Internet Keyboard组合成一个设备。如下图

然后再设置下手柄映射,我这里暂时全部默认,如下图

接下来设置背键,先在WinControls中将背键设置成NC

再在reWASD中切换到键盘映射界面。例如这里映射F14(背键L4)为shift切换层按键(类似于rog掌机中的第二功能键),F15(背键R4)映射成手柄A键,如下图

点击左下方应用到配置槽完成按键映射配置。
经测试,现在背键的逻辑与正常按键一样,不会出现按下连发的情况了。
其他型号的GPD掌机因为我手头没有不知道背键NC状态是不是也是一样,有机器的朋友可以测试下留言。
PS: 有些人觉得GPD Win5的start在右下方不方便,想要映射到右上方的手柄键盘切换键,也是可以办到的。手柄键盘切换键实际上是F13,按照以上方法在reWASD里面将键盘的F13映射成start键就ok了。
个人原创,分享给大家。完美!收工!