WIN32 RAW键盘输入删除自动点
win32 raw keyboard input remove autorepeat
,因此手头的问题几乎是:Windows密钥重复设置影响原始输入消息
尽管这可能是重复的,但没有提供答案,因此它进行了:
-
我的印象是对于FPS游戏开发,应该使用原始输入。但是,问题是,毕竟输入不是很原始的,并且包括一个延迟(对于连续的键盘),并且只有在初始延迟之后,连续键按,即WM_INPUT消息的连续流。使用DirectInput(已弃用)时,我没有这些问题。有没有一种方法可以仅使用原始输入来实现同一件事?需要明确的是,我想要的是,如果我不断按键,我会不断收到WM_INPUT消息,而不会引起自动驾驶引起的初始延迟。我使用的是原始输入标准读取,而不是缓冲读(https://msdn.microsoft.com/en-us/library/windows/desktop/mss645546(v = vs.85).aspx .aspx)
-
上述标准的原始输入读数与缓冲读者之间的区别在哪里?
directInput是一个过时的异步抽象层,它做得完全相同:过程原始输入。除非您需要支持操纵杆或任何遗产,否则不建议使用它,因为建议使用GamePads Xinput。
Windows不是实时操作系统,最好的选择是坚持使用WM_INPUT消息。这需要维护关键状态数组(Bool KeyState [256]),并基于您的逻辑,就好像(keyState [vk_backspace] == true){}。如果您还要捕获新闻发布会和发布事件,则必须维护最后一个密钥状态的数组,并分析WM_Input检查更改,并仅在键的最后一个状态为false和wm_input消息时才产生新闻开始事件说键现在按下。
另一个选项是使用getAsynCkeyState定期手动检查所有输入。但这将使您无法在两个呼叫getAsynckeystate之间发生钥匙按下。该函数的文档表明较低的位确切说明了这一点,但是该位在所有应用程序之间共享,并且可以通过其他应用程序重置,这是可悲的。
如果我正确理解您,您想要的只是瞬时的键状态,可以通过键盘等辅助类轻松获得,但是它不会使用WM_INPUT,因此由于窗口检查层而可能会出现较小的延迟。
auto kb = keyboard->GetState();
if (kb.Back)
// Backspace key is down, with no delay of waiting for key repeat
- C++如何通过用户输入删除列表元素
- 如何在输入新内容 c++ 之前删除文件中的所有内容
- 在命令行上将输入显示到数组中时如何删除 ./a.out?
- C ++,如何从控制台中输入的字符串中删除字母?
- 如何删除已输入的书以及如何使标题,语言和名称在上面放置空格不会出错?
- 从输入中删除重复项,而不使用任何数据结构
- C++ 链表:它不会删除第一个输入
- 如何删除用户输入字符串末尾的空字符?
- 删除函数环境中C++输入 R 对象
- 为什么输入流从第二行输入中删除一些字符
- WIN32 RAW键盘输入删除自动点
- 从控制台获取的每 30 秒输入后,从 Vector 中逐个删除数字
- 如何删除输入的字母/字符串或任何输入
- 如何将用户输入添加到数组或删除?C
- 从输出流中删除输入
- MFC:阻止线程删除指向其 ControllingFunction 的输入指针
- 尝试从用户C++输入的代码中删除注释
- 从C++中的用户输入中删除符号
- c++ 11 -从流中删除输入
- 从用户输入中删除引用结构/类成员变量