在C ++中使用SetKeyboardState和GetKeyboardState

时间:2010-02-23 05:46:59

标签: c++ winapi

我不知道如何在这里写一个好问题,但是,基本上,有谁知道在哪里可以找到一些C ++源代码使用这些来实际设置键盘状态?出于某种原因使用它,MSDN在Windows 7上的方式不做任何事情。

基本代码:

PBYTE keyState;

GetKeyboardState(keyState);

...

// Later on when I need to set the keyboard state (key pressed etc) back to original:
SetKeyboardState(keyState);

并且......没有任何反应:(

1 个答案:

答案 0 :(得分:0)

自: http://www.gamedev.net/community/forums/topic.asp?topic_id=43463

首先,GetKeyboardState()将是一个错误的函数,因为Windows有机会处理键盘消息(无论你是否也想要它),它会更新键盘状态的结果,以便下次调用GetKeyboardState( )。

这是我用来获取键盘按键状态的一个小功能。但请注意,根据主循环的速度,如果你不期待它可能会引起问题。

您需要跟踪上次调用ReadKeyboard()函数时是否按下了特定键。如果您的循环每秒轮询键盘30次,则按一次键可能会导致该键连续标记3或4个调用。有时候相当混乱。我以为我会提到它。

void ReadKeyboard( char* keys )
{ 
  for (int x = 0; x < 256; x++)
    keys[x] = (char) (GetAsyncKeyState(x) >> 8);
}