Windows コンソールは、 Windows上でコンソール アプリケーションを実行するためのGUIアプリケーションです。Windows コンソールは、オペレーティングシステムのシェル(コマンド プロンプトやPowerShellなど)、ユーティリティ( Far Managerなど)、および一部の古いアプリケーション( Midnight Commanderなど)といったテキストベースのプログラムを実行するために使用されます。
Windows Terminal は、 Windows Console の代替としてWindows 10で導入されました。 [ 1 ] 2019 年に、コンソール ホストはWindows Terminal とともにMIT ライセンスの下でオープンソース化されました。[ 2 ]


Windowsコンソールは、ウィンドウモードまたはフルスクリーンモードで動作します。モードはAlt+キー↵ Enterを押すことで切り替えられます。
ウィンドウモードでは、コンソールはウィンドウ内にテキストを書き込み、オペレーティングシステムのフォントレンダリングを使用します。このモードでは、アプリケーションのユーザー操作はウィンドウシステムによって制御され、xtermなどのX Window Systemアプリケーションと同様です。
Windows XP以前のバージョンでは、フルスクリーン コンソールはハードウェア テキスト モードを使用し、テキスト ベースのシステム コンソールと同様に、ラスター フォントをビデオ アダプタにアップロードします。この初期のフルスクリーン モードは VGA 互換のテキスト モードのみをサポートし、最大文字解像度は 80列x 28 行でした。[ 3 ]このモードはWindows Vistaで削除されましたが、[ 4 ] Windows 8までは、Windows XP ディスプレイ ドライバをインストールすることでこの問題を回避することができました。[ 4 ] [ 5 ]
Windows 10では、再び全画面モードが搭載されました。この実装では、テキストモードではなくネイティブのWindowsレンダリングサブシステムが使用され、行と列で画面を埋めることができます。[ 6 ]
プログラムは、Windows APIを介してホストコンソールとプログラム的にやり取りできます。Windows APIは、高レベル関数 ( ReadFile、、、、など) と低レベル関数 ( ReadConsole、など) の両方を公開しています。[ 7 ]WriteFileWriteConsoleReadConsoleInputWriteConsoleOutput
ユーザーは、コンソールのフォントやカラーパレットを、システム全体またはアプリケーションレベルで設定できます。ただし、コンソールアプリケーションのインスタンスは、実行時にフォントやカラーパレットを変更することはできません。
コンソールアプリケーションは、Windows(特にWindows 9x )上では見た目に違いがないように見えるかもしれませんが、 MS-DOSアプリケーションとは明確に区別されます。コンソールアプリケーションはWindows APIにアクセスでき、MS-DOSや互換システム上では動作しません。一方、DOSアプリケーションはWindows APIにアクセスできず、仮想DOSマシン(VDM)の助けを借りて32ビット版のWindows上でのみ動作します。
Windowsコンソールのインスタンスには、画面バッファと入力バッファがあります。入力バッファは、キーボードやマウスなどからのイベントを格納するキューです。出力バッファは、文字とその属性を格納する矩形のグリッドです。コンソールウィンドウには複数の出力バッファが存在する場合がありますが、特定の時点ではそのうちの1つだけがアクティブ(つまり表示される)になります。
Windows 3.1以前のバージョンでは、コンソールはネイティブにサポートされていませんでした。これらのバージョンは単にMS-DOSのグラフィカルインターフェースに過ぎなかったため、以前のWindowsバージョンで実行されていたテキストプログラムのほとんどは、実際にはウィンドウ内で実行されていたMS-DOSプログラムでした。アプリケーションをWindowsに移植する作業を簡素化するために、Visual C++の初期バージョンには、通常のウィンドウ内で基本的なコンソール機能を実装するライブラリであるQuickWinが付属していました。Borland C++用の同様のライブラリはEasyWinと呼ばれていました。

Windows 9x のサポートは、 Windows NTに比べて比較的劣っています。これは、コンソール ウィンドウがシステム仮想 DOS マシンで実行されるため、Win32 コンソール アプリケーションへのキーボード入力は、キーボード割り込みをフックして実際の DOS アプリケーションにも使用される DOS VM で実行される conagent.exeによって転送される必要があるためです。conagent.exeその後、Vcond ( VxDです) が呼び出されます。Vcondはキーボード入力をシステム VM に渡し、最終的に Win32 コンソール アプリケーションに渡す必要があります。パフォーマンス以外にも、この実装のもう 1 つの問題は、DOS VM にローカルなドライブが Win32 コンソール アプリケーションから見えないことです。これは混乱を招く可能性があります。
Windows 9x では、スクリーンバッファはVGA テキストバッファの構造を模倣しており、文字セルごとに 2 バイトが割り当てられます。1 バイトは文字コード、もう 1 バイトは属性です (文字はOEM 文字セットに属している必要があり、属性は高輝度背景/点滅なしです)。実際の VGA テキストモードを使用する場合、これにより動作が大幅に高速化されます。


従来、クライアント/サーバー ランタイム サブシステム(CSRSS) は、 Windows NT ファミリーのオペレーティングシステムでコンソール ウィンドウの管理を担当していました。 [ 8 ] Windows 7では、CSRSS はconhost.exeコンソール ウィンドウごとに 1 つのプロセスを起動して管理します。Windows 8以降では、コンソール アプリケーションがconhost.exeプロセスを直接起動します。この変更は、セキュリティとユーザビリティの両方に影響を与えます。CSRSS は高い特権を持つセキュリティ コンテキストで実行されますが、各プロセスはコンソール アプリケーションと同じセキュリティ コンテキストで実行されます。さらに、Windows 7 では、この変更によりコンソール ウィンドウにAero Glass テーマconhost.exeの機能が追加されました。[ 9 ]
Windows NT およびWindows CEでは、スクリーン バッファは文字セルごとに 4 バイトを使用します。2 バイトは文字コード、2 バイトは属性です。文字は、Unicodeの 16 ビット サブセット( UCS-2 ) でエンコードされます。[ 10 ]下位互換性のために、コンソール API には Unicode と非 Unicode の 2 つのバージョンがあります。非 Unicode バージョンの API は、コード ページ切り替えを使用して表示文字の範囲を拡張できます (ただし、コンソール ウィンドウにTrueTypeフォントが使用されている場合に限ります。これにより、使用可能なコードの範囲が拡張されます)。UTF -8も「コード ページ 65001」として使用できます[ 11 ] (完全な Unicode の UCS-2 サブセットからのみ表示されます)。
Windows 10 October 2018 Update以降、WindowsコンソールはUnicodeを完全にサポートしています。[ 12 ]
および VGA ドライバーは、Windows 8 以降のバージョンではコンパイルされません。
コンソール: コードページ65001 (utf8) で出力テキストが表示されない問題を修正