在Win32中确定按键和按键的最快方法是什么?

jud*_*rke 10 c++ keyboard winapi user-input input

确定按键的最快方法是什么,以及如何确定按键是否被按住?窗口消息传递似乎很慢.请提供一个如何操作的示例,以及为什么它比替代方案更快.

要清楚,这是一个实时循环(模拟)所以我正在寻找最快的方法来确定是否按下了一个键,并检查它是否被保持.

Buk*_*kes 22

GetAsyncKeyState()就是你要找的东西.无论输入队列状态如何,它都会读取键盘的物理状态.如果设置了高位,则在通话时键已关闭.

// Fetch tab key state.
SHORT tabKeyState = GetAsyncKeyState( VK_TAB );

// Test high bit - if set, key was down when GetAsyncKeyState was called.
if( ( 1 << 15 ) & tabKeyState )
{
    // TAB key down... 
}
Run Code Online (Sandbox Code Playgroud)

此外,为了记录,Windows不是实时操作系统.如果您的应用程序需要实时精确度,您可能需要选择其他平台.

  • 嗯.`test high bit`将是`if((1 << 15)&tabKetState)` (2认同)

sel*_*bie 6

如果您只想轮询键盘状态以便发现哪些键是向上/向下以及shift/ alt/ ctrl状态,只需调用GetKeyboardState(MSDN参考).

当我在游戏工作室工作时,这正是我们为每一帧获得键盘状态的方式.应该适用于您的模拟代码.