Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Win32键盘在未聚焦时释放按键时进行管理_C++_Windows_Winapi_Keyboard Events - Fatal编程技术网

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

C++ Win32键盘在未聚焦时释放按键时进行管理,c++,windows,winapi,keyboard-events,C++,Windows,Winapi,Keyboard Events,我有一个输入管理器,可以通过消息很好地跟踪键盘状态 WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP 所以我知道什么时候按下或不按下左控件。 但是,如果窗口失去焦点,并且在再次获得焦点之前释放了按键,则不会出现“按键已释放”消息 这似乎是每个人都会遇到的一个非常棘手的问题,所以我觉得我错过了一些东西。现在我有一个修正,当窗口获得焦点时,只使用GetKeyboardState。但这感觉有点过分了 现在我还看到了一个“LowLevelKeyboard

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

WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP
所以我知道什么时候按下或不按下左控件。 但是,如果窗口失去焦点,并且在再次获得焦点之前释放了按键,则不会出现“按键已释放”消息

这似乎是每个人都会遇到的一个非常棘手的问题,所以我觉得我错过了一些东西。现在我有一个修正,当窗口获得焦点时,只使用
GetKeyboardState
。但这感觉有点过分了

现在我还看到了一个“LowLevelKeyboardProc”,它可以帮助解决这个问题,只需始终检测按键。但是仅仅从名字上看,使用它似乎有一些缺点(比如减慢所有应用程序的输入速度?)


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

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

“因此我知道何时按下或不按下左控件”-您不需要自定义输入管理器,只需使用
Get(Async)KeyState()
。(比如减慢所有应用程序的所有输入?):顺便说一句,没有人输入那么快;-)@remy“GetAsyncKeystate()”在程序上下文中似乎起作用。是否有可能提供2个不同的线程独立访问?与线程A调用它时一样,A(且仅A)的最后一次调用也算作最后一次调用。通常优先于
SetWindowHookEx()
:在大多数情况下,应用程序需要使用低级钩子,它应该监视原始输入。这是因为原始输入可以异步监视针对其他线程的鼠标和键盘消息,比低级钩子更有效