次の方法で共有


Low-Level コンソール入力関数

Von Bedeutung

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

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

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

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

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

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

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