Winapi 原始输入不能可靠地接收所有输入

Winapi 原始输入不能可靠地接收所有输入,winapi,raw-input,Winapi,Raw Input,我在我的应用程序中使用原始输入来处理全局热键,但我遇到了一些古怪的行为。在正常情况下,如果我按键盘上的PrintScreen键,我的应用程序会看到以下原始输入事件(扫描代码): 2a(向下)->37(向下)->37(向上)->2a(向上) 但是,如果我运行全屏游戏,如Team Fortress 2,然后按PrintScreen,我会看到以下原始输入事件: 2a(向下)->37(向上)->2a(向上) 37(向下)发生了什么事?就好像有什么东西吞没了输入事件。你说的是扫描代码还是虚拟钥匙代码?它们

我在我的应用程序中使用原始输入来处理全局热键,但我遇到了一些古怪的行为。在正常情况下,如果我按键盘上的PrintScreen键,我的应用程序会看到以下原始输入事件(扫描代码):

2a(向下)->37(向下)->37(向上)->2a(向上)

但是,如果我运行全屏游戏,如Team Fortress 2,然后按PrintScreen,我会看到以下原始输入事件:

2a(向下)->37(向上)->2a(向上)


37(向下)
发生了什么事?就好像有什么东西吞没了输入事件。

你说的是扫描代码还是虚拟钥匙代码?它们不是一回事。例如,0x2A是
PrntScr
的虚拟键,0x37是
7
的虚拟键。我想知道为什么在按下
PrntScr
时会有
7次
按键。您确定您不是在按下
PrntScr
的同时捕获不相关的内容吗?记住,毕竟你得到的是原始输入。是的,我说的是扫描代码(即RAWKEYBOARD中的MakeCode)。当我将0x37转换为虚拟密钥代码时,它将成为VK_快照,因此我无法检测VK_快照的密钥关闭事件。是的,这两个输入事件肯定与我按键盘上的PrtScrn/SysRq键有关,而不是其他什么。您是使用
GetRawInputData()
还是
GetRawInputBuffer()
获取消息数据?您是否使用Spy++或类似工具检查过您是否只收到3条消息而不是4条消息?我使用的是GetRawInputData()。我只收到3条WM_输入消息。正如我所说,它在一般情况下有效,但在某些情况下,例如运行游戏时,它不再以相同的方式工作。考虑到事件直接来自硬件并直接传递到应用程序,硬件可能首先只生成3个事件,而没有任何事件被“吞没”(我不确定原始输入是否可以接受,除非你的应用程序中有什么东西在处理它们之前丢弃了
WM_输入
消息)。尝试切换到
GetRawInputBuffer()
,看看它是否也只报告3个事件。