关于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; }