c++ - GetKeyState 和 GetAsyncKeyState 有什么区别?

标签 c++ windows

MSDN中,我了解到GetKeyState与当前线程的消息队列相关联。

然后我创建了两个示例应用程序:KeyPresserBackChecker

我在KeyPresser中按下一个键,在此应用程序中,我使用GetKeyState/GetAsyncKeyState/GetKeyboardState来检索按下的按键状态,他们告诉我该键是压下去。

然后我向 BackChecker 发送(或发布)一条消息表单 KeyPresser ,以通知 BackChecker 检查其线程中的按键状态。

我从 BackChecker 得到相同的结果,表明该键被按下。但我认为 GetKeyState/GetKeyboardState 应该返回 因为按键是在 KeyPresser 线程中按下的,它与 线程无关BackChecker

为什么?

最佳答案

Windows 上的键盘输入会被缓冲。它确保用户可以继续输入,即使程序暂时没有响应。在某种程度上,这样总是不会丢失击键。它们被添加到消息队列中,程序的消息循环稍后使用 GetMessage() 检索它们。

除了击键之外,它还存储所有其他键的状态。为了确保最终检索到消息时,您可以可靠地判断哪些其他键被按下。例如,对于修饰键非常重要。否则,像 Ctrl+A 这样的快捷键将无法可靠地工作。

因此,您通常总是使用GetKeyState(),您可以获得最初记录的按键状态。或者 GetKeyboardState(),你会得到整个辣酱 Jade 米饼馅。使用 GetAsyncKeyState() 不太常见,它不依赖于缓冲状态,仅在应用程序具有非常不寻常的消息处理时才需要。也许适合游戏。

关于c++ - GetKeyState 和 GetAsyncKeyState 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25891866/

相关文章:

windows - 自托管时究竟是什么导致了 AddressAccessDeniedException : HTTP could not register URL

java - 在 Windows 上的命令行中运行 jar(类路径)

c++ - boost::async 只返回无效?

c++ - 比较字符串时出现意外结果

c++ - 为指针分配内存的问题

windows - 是否可以使用 perl 处理退出代码 > 255?

Python 脚本使用 Windows 调度程序意外终止

c++ - 没有碎片化的 STL 容器的大容量内存

c++ - 在这种特定情况下,多重继承有那么糟糕吗?

Python:用土耳其语字母阅读和打印土耳其语的问题