2013-03-01 265 views
0

我使用win7 64bit。 我使用GetKeyboardState()来获取键盘状态。GetKeyboardState返回错误结果

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

如果单击主WND内,每一件事情是确定的,但如果单击主WND外,该leftButtonClicked仍然是正确的。

的MSDN说,

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

但主要WND没有收到WM_LBUTTONDOWN,那么,为什么这个函数得到错误的结果呢? 还是我误解了一些东西?

谢谢。

+0

这不是“错误的结果”,它是“你没有检查鼠标的位置” - 当你的窗口内发生的事情你只能得到VM_LBUTTONDOWN。但GetKeyState是通用的 - 它告诉你在提问时的状态,它与你的窗口是否相关取决于你的应用程序来确定。 – 2013-03-01 16:00:19

+1

我很困惑。你永远不会看GetKeyboardState的结果。 – 2013-03-04 01:28:57

回答

2

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

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

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