【发布时间】:2017-05-09 08:21:30
【问题描述】:
我有一个输入管理器,可以通过消息很好地跟踪键盘状态
WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP
所以我知道什么时候按下左键。 但是,如果窗口失去焦点并且在再次获得焦点之前释放了键,则不会出现“键释放”消息。
这似乎是每个人都经常遇到的一个非常尴尬的问题,所以我觉得我错过了一些东西。现在我有一个修复程序,当窗口获得焦点时只使用GetKeyboardState。但感觉这有点矫枉过正。
现在我还看到有一个“LowLevelKeyboardProc”,它可以通过简单地始终检测键来帮助解决这个问题。但是从名字上就感觉使用它有一些缺点(比如减慢所有应用程序的所有输入?)。
我还缺少其他解决方案吗?如果没有,这两种方法中哪一种更好?
【问题讨论】:
-
"所以我知道什么时候按下左键" - 你不需要自定义输入管理器,只需使用
Get(Async)KeyState()代替。 -
(比如减慢所有应用的所有输入速度?):没有人打字那么快 BTW ;-)
-
@remy 'GetAsyncKeystate()' 似乎是程序上下文中的工作。是否有可能给 2 个不同的线程独立访问权限?就像线程 A 调用它时一样,A(并且只有 A)的最后一次调用算作最后一次调用。
标签: c++ windows winapi keyboard-events