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を押します。これらのボタンのいずれかを放すと、あなたに知らせます
NOW j、k、l、およびiを押してください。あなたが私を離れるとき、それはボタンがリリースされたことを長らく登録しません!!! o.0
あなたがj、k、l、dを押してからdを離すと、あなたに知らせます。だから、あなたはそれらの文字を押すと4つ全てを扱うことができるので、「最大の抑うつ状態」の問題ではないようです。
今、j、k、l、i、dを押してdを放すと、ボタンがリリースされたことを知らせなくなります。だから、特定の文字が混乱するようです。
私は非常に混乱しており、誰かが喜んで助けてくれれば幸いです。
私の目標は、プレイヤーが一度にすべてのボタンを押しても(キーボードを裏返してすべてを一度に押しても)、ボタンを押しているかどうかを確認できるようにすることです。
誰もがWindows APIの中にこれを行うのより良い方法を持っている場合、私は提案
そうでない場合は、キーボードのハードウェアに直接アクセスしてキー入力を検出できます。違いは、私はWindowsのアーキテクチャ内でそれをしたいです – Parad0x13
それは私のハードウェアの笑いには制限があるようだ。それを指摘してくれてありがとう... shucks ... – Parad0x13