我想使用Windows命令提示符編寫DOS遊戲。我有我的簡化源代碼在這裏:Win32命令提示符輸入緩衝區不捕捉按鍵
#include <windows.h>
#include <stdio.h>
HANDLE hStdin;
VOID KeyEventProc(KEY_EVENT_RECORD);
int main(VOID) {
DWORD cNumRead, fdwMode, i;
INPUT_RECORD irInBuf[128];
hStdin = GetStdHandle(STD_INPUT_HANDLE);
while(true) {
ReadConsoleInput(hStdin, irInBuf, 128, &cNumRead);
for (i = 0; i < cNumRead; i++) {
switch(irInBuf[i].EventType) {
case KEY_EVENT:
KeyEventProc(irInBuf[i].Event.KeyEvent);
break;
default:
break;
}
}
}
return 0;
}
VOID KeyEventProc(KEY_EVENT_RECORD ker) {
if(ker.bKeyDown) {}
else printf("key released\n");
}
的問題是,當多個按鈕的某些組合壓制,他們似乎不再註冊!
例如,運行該程序並按a,然後鬆手。它會告訴你,你放開一個按鈕。
現在按j,k和l。當你放開任何這些按鈕時,它會讓你知道
現在按j,k,l和i。當你放開我時,它不會註冊一個按鈕已經被釋放! o.0
但是,如果你按j,k,l和d然後釋放d它會讓你知道。所以它似乎不是'最大壓低狀態'的問題,因爲它可以處理所有4個,當你按這些字母。
現在,如果您按j,k,l,i然後d並放開d,它不會讓您知道按鈕已被釋放。所以看起來某些字母搞砸了。
我很困惑,我非常感謝任何人願意給予的幫助。
我的目標是能夠檢查按鈕的任意組合,即使玩家一次按下所有按鈕(將鍵盤翻轉並一次按下所有按鈕)我希望能夠檢查這一點。
如果有人在Windows API中做的更好的辦法,我開放的建議
多數民衆贊成在這種情況下,使用直接訪問鍵盤硬件,我可以檢測到任何按鍵。不同之處在於我想在windows體系結構中實現它 – Parad0x13
看起來我的硬件有一個限制。謝謝你指出...... shucks ... – Parad0x13