Win32コンソール()はWindows APIのシステムに実装されているテキストユーザーインターフェイスで、コンソールアプリケーションの動作を担う。Win32コンソールはスクリーンバッファと入力バッファを備え、ウィンドウまたはテキストモード画面を+キーで切り替えることができる。
Win32コンソールは基本的に画像の表示を必要としないアプリケーションに使われるが、表示色を変更することはできるSetConsoleTextAttribute function - Windows Console | Microsoft DocsConsole Screen Buffers - Windows Console | Microsoft Docs。コマンドラインインターフェイスツールを含む例として、Windowsコマンドプロンプト/コマンドプロセッサ (cmd.exe) あるいはWindows PowerShellなどのコマンドラインインタープリター、FAR ManagerやMidnight Commanderといったファイルマネージャー、MS-DOS Editorなどのテキストエディターが存在する。
ウィンドウモードと全画面モード Win32コンソールアプリケーションは2つのモードで動作する。
1つはウィンドウの中にテキストを表示するもので、オペレーティングシステムのフォントレンダリングを使用する。このモードでは、アプリケーションとユーザーとの仲介はウィンドウシステムによって制御される。これはXtermといったX Window Systemアプリケーションに類似している。
全画面モードWin32コンソールはハードウェアテキストモードで、ビデオカードのラスターフォントで描画を行う。これはテキストシステムコンソールに類似する。全画面モードではいかなるグラフィックドライバーがインストールされていても、Windows標準のVGAドライバーを使用する。そのため、VGA互換テキストモードしかサポートせず、最大表示文字数は英語モードの場合で80字×28行に制限されている。この点は、Linuxなどの他のオペレーティングシステムではドライバー次第でより高解像度なコンソールを表示できることとは対照的である。このモードはWindows VistaでWDDMがVGAモードをサポートしなくなったことにより廃止されたがWindows 7まではXDDM/XPDMドライバーをインストールすることで使用可能だった。 Windows 10で再び全画面モードが使用可能になったがこれはVGAモードとは関係なく、高解像度で行われる。
詳細 プログラムはWin32コンソールに高水準関数 (ReadConsole, WriteConsole) または低水準関数 (ReadConsoleInput, WriteConsoleOutput) のどちらからでもアクセスできる。これら高水準関数はGDIより限定的で、例えばプログラムからカラーパレットを変更することはできずWindows Vista以降ではSetConsoleScreenBufferInfoEx 関数でカラーパレットを指定できる。SetConsoleScreenBufferInfoEx function - Windows Console | Microsoft Docsを参照。、またこれらの関数を使ってコンソールで使用されるフォントを変更することもできない。
Win32コンソールプログラムは、しばしばMS-DOSアプリケーションと混同される。しかし、「Win32」という名前の通り、Windows NTネイティブなシステムの一部あるいは一形態であり、全く異なったものである。
なお、32ビット版WindowsはNT仮想DOSマシン (NTVDM) を通してWin32コンソールでMS-DOSプログラムを実行することができる。
またWin32という名の通り、基本的にはNT系以降のWindowsのものであり、9x系では部分的に取り入れられていたが、Windows 3.1以前のものは別のシステムである。
MS-DOSアプリケーションのWindowsへの移植を容易にするため、Visual C++の初期バージョンではウィンドウに基本的なコンソール機能を実装したQuickWinライブラリが提供された。Borland C++では同等の機能がEasyWinとして付属した。
実装 Windows 9x Windows 9x系での実装はWindows NT系と比べて貧弱である。コンソールウィンドウは仮想DOSマシンで動作し、Win32コンソールアプリケーションに対するキーボード入力はDOS VMで動作するconagent.exeによって行われる。これはキーボードをフックするリアルモードDOSアプリケーションにも使われるものである。conagent.exeはVcond (VxD) を呼び出す。そしてVcondはキーボード入力をシステムVMに渡し、最終的にはWin32コンソールアプリケーションに渡る。この実装はパフォーマンスの問題に加え、DOS VMで動いているか否かがWin32コンソールアプリケーションからは判別できないという別の問題があり、時に利用者や開発者に混乱をもたらす。
Windows 9xでは、スクリーンバッファはVGAテキストバッファと同じ構造を持ち、画面文字単位で2バイト、文字コードと属性コードの1バイトずつで構成される。文字コードは現在のオペレーティングシステムに設定されているOEMコードページの文字セットになり、日本語版Windowsの場合は既定ではCP932で設定される。
Windows NT系およびWindows CE Windows NT系オペレーティングシステムではクライアント/サーバー ランタイム サブシステム (csrss.exe) がWin32コンソールの役割を担っていたが英語の文書のみ、CSRSSの説明が記載されている。、Windows Vistaからは脆弱性対策で主要な機能はconhost.exeに移された。
WIndows NT系およびWindows CEでは、スクリーンバッファは画面文字単位あたり4バイトで、文字コードに2バイト、属性に2バイトで構成されている。文字は16ビットUnicode (UTF-16) にエンコードされる。後方互換性のため、コンソールAPIにはUnicodeバージョンとANSIマルチバイト文字セット (MBCS) バージョンの2種類が用意されている。
脚注
関連項目 シェル
外部リンク コンソール リファレンス - Windows コンソール