获取键盘状态可以用以下方法:
#include<windows.h>
SHORT WINAPI GetAsyncKeyState( _In_ int vKey);
通常情况下,使用以下宏定义会更方便:
#define KEY_DOWN(key_name) ((GetAsyncKeyState(key_name)& 0x8000)?1:0)
#define KEY_UP(key_name) ((GetAsyncKeyState(key_name)&0x8000)?0:1)
那么如何将其组合为一个完整的键盘按下抬起事件呢
我的方法如下:
bool hasKeyDown[26] = { false };
for (;;)
{
for (int i = 0; i < 26; i++)
{
if (KEY_DOWN('A' + i))
{
hasKeyDown[i] = true;
}
}
for (int i = 0; i < 26; i++)
{
if (KEY_UP('A'+i) && hasKeyDown[i] == true) {
hasKeyDown[i] = false;
//此时可保证进行了一次完整的键盘按下+抬起
std::thread t1(PlaySoundFromFile, 'A' + i);
t1.detach();
}
}