低レベル コンソール入力関数

重要

このドキュメントでは、エコシステム ロードマップの一部ではなくなったコンソール プラットフォームの機能について説明します。 このコンテンツを新しい製品で使用することはお勧めしませんが、今後も既存の使用をサポートし続けます。 推奨される最新のソリューションでは、クロスプラットフォーム シナリオでの互換性を最大限に高める仮想ターミナル シーケンスに重点を置いています。 この設計決定の詳細については、クラシック コンソールと仮想ターミナルのドキュメントを参照してください。

低レベルのコンソール入力関数バッファーには、キーボード、マウス、バッファーサイズ変更、フォーカス、メニュー イベントに関する情報を含めることができる入力レコードが含まれています。 低レベル関数は、入力バッファーのデータをフィルター処理する高レベル関数とは異なり、入力バッファーへの直接アクセスを提供し、キーボード入力以外のすべてをディスカードします。

コンソールの入力バッファーにアクセスするための 5 つの低レベル関数があります。

ReadConsoleInput 関数、PeekConsoleInput 関数、WriteConsoleInput 関数は、INPUT_RECORD 構造体を使用して入力バッファーの読み取りまたは書き込みを行います。

低レベルのコンソール入力関数の説明を次に示します。

関数 説明
ReadConsoleInput 入力バッファーから入力レコードを読み取って削除します。 この関数は、少なくとも 1 つのレコードを読み取ることができるまで戻りません。 その後、使用可能なすべてのレコードは、使用可能なレコードがなくなったか、指定された数のレコードが読み取られるまで、呼び出しプロセスのバッファーに転送されます。 未読レコードは、次の読み取り操作のために、入力バッファー内にとどまります。 この関数は、読み取られたレコードの合計数を報告します。 ReadConsoleInput の使用例については、「入力バッファー イベントの読み取り」を参照してください。
PeekConsoleInput 入力バッファー内の保留中の入力レコードを削除せずに読み取ります。 指定された数までの使用可能なすべてのレコードが、呼び出しプロセスのバッファーにコピーされます。 使用可能なレコードがない場合、この関数はすぐに戻ります。 この関数は、読み取られたレコードの合計数を報告します。
GetNumberOfConsoleInputEvents 入力バッファー内の未読入力レコードの数を決定します。
WriteConsoleInput バッファー内の保留中のレコードの背後にある入力レコードを入力バッファーに配置します。 入力バッファーは、必要に応じて、書き込まれた数のレコードを保持するために動的に拡張されます。 この関数を使用するには、指定された入力バッファー ハンドルに GENERIC_WRITE アクセス権が必要です。
FlushConsoleInputBuffer 入力バッファー内のすべての未読イベントをディスカードします。 この関数を使用するには、指定された入力バッファー ハンドルに GENERIC_WRITE アクセス権が必要です。

アプリケーションのプロセスのスレッドは、入力バッファーで入力が使用可能になるまで待機する待ち操作を実行できます。 待ち操作を開始するには、いずれかの待ち機能の呼び出しで入力バッファーへのハンドルを指定します。 これらの関数は、1 つ以上のオブジェクトの状態が通知されたときに返すことができます。 コンソール入力ハンドルの状態は、入力バッファーに未読レコードがある場合に通知されます。 入力バッファーが空になると、状態は非通知にリセットされます。 使用可能な入力がない場合、呼び出し元のスレッドは効率的な待ち状態になり、待ち操作の条件が満たされるのを待っている間に処理時間はほとんど消費されません。