Win32 键盘在未聚焦时释放按键时进行管理

问题描述 投票:0回答:2

我有一个输入管理器,可以通过消息很好地跟踪键盘状态

WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP

所以我知道何时按下左侧控件。 但是,如果窗口失去焦点并且在再次获得焦点之前松开按键,则不会出现“按键已松开”消息。

这似乎是一个非常尴尬的问题,每个人都会遇到,所以我觉得我错过了一些东西。现在我有一个修复,当窗口获得焦点时仅使用

GetKeyboardState
。但感觉这有点过分了。

现在我还看到有一个“LowLevelKeyboardProc”,它可以通过简单地始终检测按键来帮助解决这个问题。但仅从名称来看,就感觉使用此功能有一些缺点(例如减慢所有应用程序的所有输入?)。

我是否缺少其他解决方案,如果没有,这两种方法中哪一个是更好的方法?

c++ windows winapi keyboard-events
2个回答
0
投票

可能有点晚了但是...

虽然在窗口焦点丢失时无法收到按键是否被释放的通知,但如果焦点丢失,您会收到 WM_KILLFOCUS 通知。 如果您跟踪按下了哪些键,那么您就可以正确调用释放过程来处理此问题。


-1
投票

您需要查找 SetWindowsHookEx 的 MSDN 文档。本质上,您需要做的是将此函数与回调过程(这是您的应用程序的一部分)一起使用,该回调过程在按键状态更改时运行。

© www.soinside.com 2019 - 2024. All rights reserved.