0

我用的是win7 64位。我使用 GetKeyboardState() 来获取键盘状态。

BYTE keyState[256];
GetKeyboardState(keyState);
BOOL leftButtonClicked = GetKeyState(VK_LBUTTON);

如果在主 wnd 内部单击,一切正常,但如果在主 wnd 外部单击,leftButtonClicked 仍然为 true。

msdn说,

应用程序可以调用此函数来检索所有虚拟键的当前状态。当线程从其消息队列中删除键盘消息时,状态会发生变化。状态不会随着键盘消息被发布到线程的消息队列而改变,也不会随着键盘消息被发布到其他线程的消息队列或从其他线程的消息队列中检索而改变。

但是 main wnd 没有收到 WM_LBUTTONDOWN,那么为什么这个函数会得到错误的结果呢?还是我误解了什么?

谢谢。

4

1 回答 1

2

GetKeyboardState 和 GetKeyState 返回键盘和鼠标的缓冲状态。当最后一个输入事件进入消息队列时存储。一个重要的特性是,如果程序不发送消息,消息可以在队列中存储一段时间。

当您在窗口外单击时,生成的输入事件会转到与您单击的窗口相关联的任何队列。不是您的程序的队列。因此,键盘状态不会改变。

您需要使用 GetAsyncKeyState() 来获取当前状态。

于 2013-03-04T01:48:13.297 回答