影响原始input消息的Windows键重复设置

它应该是来自设备的直接RAWinput,这很奇怪,它受到这些设置的影响:

在这里输入图像说明

直到延迟之后,才会收到WM_INPUT消息。 重复率也影响它。 我也尝试注册与NO_LEGACY标志的原始input设备,没有区别。 这是与我有这个问题的DirectX11应用程序。

case WM_INPUT: {Input::handleInput(uMsg, wParam, lParam); break; } 

显然,没有办法解决这个问题,一个gamedev教程解释说,你只需要在自己的代码中用你自己的复杂的解决方法来处理它。 原始输入我的微软。

当按住WM_INPUT键时,会发生一个按键消息,等待Windows“按键重复延迟”过去,然后继续以Windows“按键重复速度”设置发送按键消息。

我发现不是使用Makecode或Vkey成员,而是使用keyboard.flags成员更容易,因为(对于大多数键),当一个键被关闭时,这个标志将会是零,当它向上时,标志将被设置为1,所以你可以倒转它:

  switch (mpRawInput->data.keyboard.VKey) { case VK_W: Input::mIsKeyDown[VK_W] = !mpRawInput->data.keyboard.Flags; break; case VK_A: Input::mIsKeyDown[VK_A] = !mpRawInput->data.keyboard.Flags; break; case VK_S: Input::mIsKeyDown[VK_S] = !mpRawInput->data.keyboard.Flags; break; case VK_D: Input::mIsKeyDown[VK_D] = !mpRawInput->data.keyboard.Flags; break; case VK_SPACE: Input::mIsKeyDown[VK_SPACE] = !mpRawInput->data.keyboard.Flags; } 

使用keyboard.flag 0或1的值意味着当你按一个键时你得到一个0的标志信息,所以你发送相反的“isKeyDown”布尔值。 当该键被解除时,该标志将被设置为1。

对于其他按键,则需要解决方法,例如,当num锁定打开时,箭头键的标记值为3,关闭时为正常。 其他键的行为完全不同,如“打印屏幕”和“暂停/休息”。 真是一团糟。