我想使用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