在C+中使用SetKeyboardState和GetKeyboardState+; 我不知道如何写一个好的问题,但是,基本上,有人知道我在哪里可以找到一些C++源代码来使用这些来真正设置键盘状态吗?由于某些原因,在Windows7上使用MSDN的方式根本不起任何作用

在C+中使用SetKeyboardState和GetKeyboardState+; 我不知道如何写一个好的问题,但是,基本上,有人知道我在哪里可以找到一些C++源代码来使用这些来真正设置键盘状态吗?由于某些原因,在Windows7上使用MSDN的方式根本不起任何作用,c++,winapi,C++,Winapi,基本代码: PBYTE keyState; GetKeyboardState(keyState); ... // Later on when I need to set the keyboard state (key pressed etc) back to original: SetKeyboardState(keyState); 而且。。。什么也没有发生:(来自: 首先,GetKeyboardState()是一个错误的函数,因为Windows有机会处理键盘消息(无论您是否希望),它

基本代码:

PBYTE keyState;

GetKeyboardState(keyState);

...

// Later on when I need to set the keyboard state (key pressed etc) back to original:
SetKeyboardState(keyState);
而且。。。什么也没有发生:(

来自:

首先,GetKeyboardState()是一个错误的函数,因为Windows有机会处理键盘消息(无论您是否希望),它会为下一次调用GetKeyboardState()更新键盘状态的结果

这里有一个我用来获取键盘按键状态的小函数。不过要小心,这取决于主循环的速度,如果你没有预料到的话,它可能会导致问题

您需要跟踪上一次调用ReadKeyboard()函数时是否按了某个特定键。如果循环每秒轮询键盘30次,则按一次键可能会导致该键被标记为连续3或4次调用。有时会令人困惑。我想我会提到它

void ReadKeyboard( char* keys )
{ 
  for (int x = 0; x < 256; x++)
    keys[x] = (char) (GetAsyncKeyState(x) >> 8);
}
void读取键盘(字符*键)
{ 
对于(int x=0;x<256;x++)
键[x]=(字符)(GetAsyncKeyState(x)>>8);
}
什么是“什么都没发生?”请参阅我的答案,了解C#中的实现。