在紧密循环中调用GetKeyState,为什么它不起作用?

时间:2012-05-09 18:41:04

标签: winapi

在Charles Petzold的书“Programming Windows”中,他提到了以下内容:

“小心GetKeyState。它不是实时的键盘状态检查。而是它反映了键盘状态,包括当前正在处理的消息。”

“不要while(GetKeyState(VK_F1) >= 0);”,保证会挂起你的程序。

我根本不明白这些。请问有人可以解释这两个事实。

1 个答案:

答案 0 :(得分:4)

每次读取排队的键盘消息时,例如通过调用GetMessage,操作系统都会更新与调用线程关联的私有键盘状态数据。当您调用GetKeyState时,私钥键盘状态数据用于确定返回的键状态。因此,只要您不读取另一个排队的消息,GetKeyState将始终返回相同的值。