高レベル コンソール入出力関数
ReadFile 関数と WriteFile 関数、または ReadConsole 関数と WriteConsole 関数を使用すると、アプリケーションはコンソール入力を読み取り、コンソール出力を文字のストリームとして書き込みます。 ReadConsole と WriteConsole は、ワイド文字関数 (テキスト引数で Unicode を使用する必要がある) または ANSI 関数 (テキスト引数で Windows 文字セットの文字を使用する必要がある) として使用できる点を除き、ReadFile や WriteFile とまったく同じように動作します。 Unicode または ANSI 文字セットをサポートするために単一のソース セットを維持する必要があるアプリケーションでは、ReadConsole と WriteConsole を使用する必要があります。
ReadConsole と WriteConsole はコンソール ハンドルでのみ使用できます。ReadFile と WriteFile は、その他のハンドル (ファイルやパイプなど) と共に使用できます。 ReadConsole と WriteConsole は、リダイレクトされ、コンソール ハンドルではなくなった標準ハンドルと共に使用すると失敗します。
キーボード入力を取得するには、プロセスで ReadFile または ReadConsole をコンソールの入力バッファーへのハンドルと共に使用するか、STDIN
がリダイレクトされている場合、ReadFile を使用してファイルまたはパイプから入力を読み取ることができます。 これらの関数は、ANSI または Unicode 文字に変換できるキーボード イベントのみを返します。 返される入力には、制御キーの組み合わせが含まれます。 関数は、ファンクション キーまたは方向キーを含むキーボード イベントを返しません。 マウス、ウィンドウ、フォーカス、またはメニュー入力によって生成された入力イベントはディスカード除されます。
行入力モードが有効 (デフォルトのモード) の場合、Enter キーが押されるまで、ReadFile と ReadConsole は呼び出しアプリケーションに戻りません。 行入力モードが無効になっている場合、関数は少なくとも 1 文字が使用可能になるまで戻りません。 どちらのモードでも、使用可能なすべての文字は、使用可能なキーがなくなったか、指定された文字数が読み取られるまで読み取られます。 未読文字は、次の読み取り操作までバッファーされます。 関数は、実際に読み取られた文字数の合計を報告します。 エコー入力モードが有効になっている場合、これらの関数によって読み取られた文字は、現在のカーソル位置でアクティブなスクリーン バッファーに書き込まれます。
プロセスでは、WriteFile または WriteConsole を使用してアクティブまたは非アクティブのスクリーン バッファーに書き込むことができます。STDOUT がリダイレクトされた場合は、WriteFile を使用してファイルまたはパイプに書き込むことができます。 処理された出力モードと EOL 出力モードでラップすると、文字がスクリーン バッファーに書き込まれるかエコーされる方法が制御されます。
WriteFile または WriteConsole によって書き込まれた文字、または ReadFile または ReadConsole によってエコーされた文字は、現在のカーソル位置のスクリーン バッファーに挿入されます。 各文字が書き込まれると、カーソル位置は次の文字セルに進みます。ただし、行の末尾での動作は、コンソール スクリーン バッファーの EOL 出力モードでのラップによって異なります。
カーソルの位置に関する詳細は、仮想ターミナル シーケンス を通じて見つけることができます。具体的には、現在の位置を見つけるためのクエリ状態カテゴリと、現在位置を設定するためのカーソル配置 カテゴリで確認できます。 または、アプリケーションで GetConsoleScreenBufferInfo 関数を使用して現在のカーソル位置を決定し、SetConsoleCursorPosition 関数を使用してカーソル位置を設定することもできます。 ただし、 仮想ターミナル シーケンス メカニズムは、すべての新規かつ継続的な開発に適しています。 この決定の背後にある戦略の詳細については、クラシック関数と仮想ターミナルとエコシステムのロードマップに関するドキュメントを参照してください。
高レベルのコンソール I/O 関数を使用する例については、「高レベル入出力関数の使用」を参照してください。