Windowsコンソールで重要なイベントを取得する方法はありますか?GUIなしでキーダウンイベントとキーアップイベントをすばやく取得する方法が必要です。getch()を使用してみましたが、キーアップが取得されず、キーが押されて戻るまで待機します。
5 に答える
ReadConsoleInput()
APIを使用します。種類のイベントに注意してKEY_EVENT
ください。これはすべてのキーダウンイベント(Ctrlキー、Shiftキー、一時停止キーは読み取れません)で機能するわけではありませんが、ほとんどは読み取ることができます。
GetNumberOfConsoleInputEvents
ブロッキングを回避するために使用します。
GetKeyState
またはを使用できますGetAsyncKeyState
が、キーダウン/キーアップイベントは発生しません。現在ダウンしているキーのみが表示されます。
したがって、本当にキーダウン/キーアップイベントを取得する必要がある場合は、フックをインストールできます。コンソールウィンドウには、Windowsのコードが所有するウィンドウハンドルと、同じくWindowsのコードが所有するメッセージポンプがあります。
GetConsoleWindowを使用して、コンソールウィンドウのウィンドウハンドルを取得します。次に、 SetWindowsHookExWH_CALLWNDPROC
を使用してフックをインストールし、コンソールウィンドウに送信されるメッセージをリッスンします。
WH_MSGFILTER
代わりにフックを試してみてください。これがコンソールウィンドウで機能するかどうかはわかりませんが、機能する場合は無視されるメッセージが少なくなります。
私はただ興味がありました、どうしてそのような論理的な質問はグーグルで何の説明も持っていないので、ここでそれを尋ねなければなりません。だから私はグーグルで検索しました:「キーボードイベントコンソールアプリケーション」そして何を推測しますか...最初の2つのリンクは興味深いです(しかし残念ながら、あなたの質問に対する正確な答えではありません):
- MSDNでのマウス/キーボード入力の処理。
- コンソールイベントハンドラー(Ctrl-Cやウィンドウを閉じるボタンなど)。
いくつかの方法があります。GetKeyboardStateは、最も明白なものの1つです。
また、試すことができますSetConsoleCtrlHandler