微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

用于控制鼠标或键盘的程序

在编写处理扫描码的游戏时,我需要知道什么才能支持Mac和PC上的国际键盘

我们应该如何处理WPF中的键盘事件? 应该是KeyUp还是KeyDown?

用Python访问Linux中键盘LED的替代方法

我该怎么去设置另一个应用程序的input语言?

用户按下可编辑的UI组件时,在Linux中自动启动键盘

使用命令行更改键盘input

我想制作一个虚拟键盘。 我是否需要将WM_KEYDOWN发送到当前活动窗口或HWND_broADCAST?

在Windows c + +禁用键盘

当窗口用户将焦点input到input区域时如何应对事件?

显然,没有办法解决这个问题,一个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,关闭时为正常。 其他键的行为完全不同,如“打印屏幕”和“暂停/休息”。 真是一团糟。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐