12

Windowsコンソールで重要なイベントを取得する方法はありますか?GUIなしでキーダウンイベントとキーアップイベントをすばやく取得する方法が必要です。getch()を使用してみましたが、キーアップが取得されず、キーが押されて戻るまで待機します。

4

5 に答える 5

10

ReadConsoleInput()APIを使用します。種類のイベントに注意してKEY_EVENTください。これはすべてのキーダウンイベント(Ctrlキー、Shiftキー、一時停止キーは読み取れません)で機能するわけではありませんが、ほとんどは読み取ることができます。

GetNumberOfConsoleInputEventsブロッキングを回避するために使用します。

于 2010-01-14T22:05:09.927 に答える
7

GetKeyStateまたはを使用できますGetAsyncKeyStateが、キーダウン/キーアップイベントは発生しません。現在ダウンしているキーのみが表示されます。

したがって、本当にキーダウン/キーアップイベントを取得する必要がある場合は、フックをインストールできます。コンソールウィンドウには、Windowsのコードが所有するウィンドウハンドルと、同じくWindowsのコードが所有するメッセージポンプがあります。

GetConsoleWindowを使用して、コンソールウィンドウのウィンドウハンドルを取得します。次に、 SetWindowsHookExWH_CALLWNDPROCを使用してフックをインストールし、コンソールウィンドウに送信されるメッセージをリッスンします。

WH_MSGFILTER代わりにフックを試してみてください。これがコンソールウィンドウで機能するかどうかはわかりませんが、機能する場合は無視されるメッセージが少なくなります。

于 2010-01-14T22:38:21.917 に答える
2

私はただ興味がありました、どうしてそのような論理的な質問はグーグルで何の説明も持っていないので、ここでそれを尋ねなければなりません。だから私はグーグルで検索しました:「キーボードイベントコンソールアプリケーション」そして何を推測しますか...最初の2つのリンクは興味深いです(しかし残念ながら、あなたの質問に対する正確な答えではありません):

于 2010-01-14T23:05:11.300 に答える
1

いくつかの方法があります。GetKeyboardStateは、最も明白なものの1つです。

于 2010-01-14T22:06:31.930 に答える
-1

また、試すことができますSetConsoleCtrlHandler

于 2016-07-17T08:34:25.393 に答える