关于windows平台读键盘按键的问题
背景是读键盘按键的程序,功能为按下一个键记录起始时间,放开一个键打印结束时间,从而记录按下的时间。但是发现现有方案都有一个问题,就是,当我按下一个键不放,此时再按下一个键时,无法读到后面按下的键。
我尝试过其实于_kbhit()+getchar()的方法和ReadConsoleInput()方法都无法处理这个问题,请问是否有可以参考的方法和思路?
新人只有20分,全送了。
程序代码:#include <iostream>
#include <Windows.h>
#define MAX_BUFFER_SIZE 10
struct KeyRecord {
bool keyDown = false;
bool keyUp = false;
DWORD downTime = 0;
DWORD upTime = 0;
};
void printRecord(const KeyRecord& record) {
std::cout << "KeyDown: " << record.downTime << ", KeyUp: " << record.upTime
<< ", Duration: " << (record.upTime - record.downTime) << std::endl;
}
int main() {
KeyRecord buffer[MAX_BUFFER_SIZE];
int bufferIndex = 0;
while (true) {
for (int i = 0; i < 256; ++i) {
if (GetAsyncKeyState(i) & 0x8000) {
// Key is down
if (!buffer[bufferIndex].keyDown) {
buffer[bufferIndex].keyDown = true;
buffer[bufferIndex].downTime = GetTickCount();
std::cout << "Press " << i << "..." << std::endl;
}
} else {
// Key is up
if (buffer[bufferIndex].keyDown && !buffer[bufferIndex].keyUp) {
buffer[bufferIndex].keyUp = true;
buffer[bufferIndex].upTime = GetTickCount();
printRecord(buffer[bufferIndex]);
bufferIndex = (bufferIndex + 1) % MAX_BUFFER_SIZE;
}
}
}
}
return 0;
}