我有一个输入管理器,可以通过消息很好地跟踪键盘状态
WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP
所以我知道何时按下左侧控件。 但是,如果窗口失去焦点并且在再次获得焦点之前松开按键,则不会出现“按键已松开”消息。
这似乎是一个非常尴尬的问题,每个人都会遇到,所以我觉得我错过了一些东西。现在我有一个修复,当窗口获得焦点时仅使用
GetKeyboardState
。但感觉这有点过分了。
现在我还看到有一个“LowLevelKeyboardProc”,它可以通过简单地始终检测按键来帮助解决这个问题。但仅从名称来看,就感觉使用此功能有一些缺点(例如减慢所有应用程序的所有输入?)。
我是否缺少其他解决方案,如果没有,这两种方法中哪一个是更好的方法?
可能有点晚了但是...
虽然在窗口焦点丢失时无法收到按键是否被释放的通知,但如果焦点丢失,您会收到 WM_KILLFOCUS 通知。 如果您跟踪按下了哪些键,那么您就可以正确调用释放过程来处理此问题。
您需要查找 SetWindowsHookEx 的 MSDN 文档。本质上,您需要做的是将此函数与回调过程(这是您的应用程序的一部分)一起使用,该回调过程在按键状态更改时运行。