用于检测键盘击键的Python模块 能否识别w/a/s/d长按判断用户是否在游戏
需求可行性与实现方案
这个需求完全可以实现,核心是通过系统级/应用级的键盘事件监听能力实现按键状态追踪,不同开发场景的具体实现方案如下:
- 如果你是在游戏本身的逻辑内实现(即你是这款游戏的开发者):
绝大多数游戏引擎都封装了现成的按键状态查询接口,直接调用即可:- Unity 可以用
Input.GetKey(KeyCode.W)/Input.GetKey(KeyCode.A)/Input.GetKey(KeyCode.S)/Input.GetKey(KeyCode.D),返回值为true就代表对应按键处于持续按下状态 - Unreal Engine 可以用
IsInputKeyDown(EKeys::W)系列接口实现 - 原生 JS 开发的网页游戏可以监听
keydown/keyup事件,自行维护一个存储四个按键状态的对象,keydown触发时把对应键值设为true,keyup触发时设为false即可
- Unity 可以用
- 如果你是要开发第三方后台程序,跨游戏检测全局的
w/a/s/d按键状态:
需要调用对应操作系统的全局输入监听API:- Windows 平台可以调用
GetAsyncKeyStateAPI,传入对应按键的虚拟键码(W对应 0x57,A对应 0x41,S对应 0x53,D对应 0x44),返回值的最高位为1就代表按键当前处于按下状态,可以循环调用这个接口检测持续按下的状态 - macOS 平台可以用
Quartz Event Services的全局事件监听接口捕获键盘事件 - Linux 平台可以读取
/dev/input/下的对应输入设备事件流解析按键状态
- Windows 平台可以调用
注意:全局键盘监听在大部分操作系统下都需要程序获得对应权限,部分安全软件可能会将这类行为判定为风险操作。另外单纯靠
w/a/s/d持续按下判断游戏操作存在一定误判可能,比如用户用这四个键编辑文档、浏览页面的时候也会触发,如果要提升准确率可以叠加其他判断维度,比如前台窗口是否为游戏进程、是否有鼠标同步操作等。
内容的提问来源于stack exchange,提问作者shshshsh
相关产品推荐
相关产品推荐

