Win32コンソールとは
Win32コンソールは、Windows APIに実装されたテキストユーザーインターフェースであり、
コンソールアプリケーションの実行環境を提供します。スクリーンバッファと入力バッファを持ち、ウィンドウモードと全画面モードを切り替えることができます。
主な用途
Win32コンソールは、主に画像表示を必要としないアプリケーションに利用されます。具体的には、コマンドラインインターフェースツール(WindowsコマンドプロンプトやPowerShell)、ファイルマネージャー(FAR Manager、Midnight Commander)、テキストエディター(
MS-DOS Editor)などが挙げられます。
表示モード
Win32
コンソールアプリケーションは、以下の2つの表示モードで動作します。
1.
ウィンドウモード: テキストをウィンドウ内に表示し、OSのフォントレンダリングを使用します。ウィンドウシステムを通じてユーザーとのやり取りを行います。X Window SystemのXtermに類似しています。
2.
全画面モード: ハードウェアテキストモードで、
ビデオカードのラスターフォントを用いて描画を行います。テキストシステムコンソールに似ています。全画面モードではVGA互換テキストモードのみをサポートし、最大表示文字数は
英語モードで80字×28行に制限されます。Windows Vista以降では、WDDMがVGAモードをサポートしなくなったため、このモードは廃止されました。
プログラムからのアクセス
プログラムは、高水準関数(`ReadConsole`, `WriteConsole`)または低水準関数(`ReadConsoleInput`, `WriteConsoleOutput`)を使用してWin32コンソールにアクセスできます。高水準関数はGDIよりも機能が限定されており、カラーパレットやフォントの変更はできません。
Win32コンソールプログラムは
MS-DOSアプリケーションと混同されがちですが、Windows NTネイティブなシステムの一部であり、根本的に異なります。32ビット版Windowsでは、NTVDMを通じてWin32コンソール上で
MS-DOSプログラムを実行できます。
歴史的背景
Win32コンソールは、NT系以降のWindowsの主要な要素であり、9x系では部分的に採用されていました。Windows 3.1以前のシステムとは異なるものです。初期のVisual C++やBorland C++では、
MS-DOSアプリケーションのWindowsへの移植を容易にするための
ライブラリ(QuickWin、EasyWin)が提供されていました。
実装の詳細
Windows 9x系でのWin32コンソールのサポートは、NT系に比べて限定的です。コンソールウィンドウは仮想DOSマシン内で動作し、キーボード入力は`conagent.exe`を介して処理されます。この実装はパフォーマンスに問題があり、また、Win32
コンソールアプリケーションがDOS VMで動作していることを判別できないという課題も抱えていました。
Windows 9xでは、スクリーンバッファはVGAテキストバッファと同じ構造を持ち、1文字あたり2バイト(文字コードと属性コード)で構成されます。文字コードはシステムに設定されたOEMコードページ(日本語版Windowsでは通常CP932)に準拠します。
Windows NT系では、クライアント/
サーバー ランタイム サブシステム(`csrss.exe`)がWin32コンソールの役割を担っていましたが、Windows Vista以降はセキュリティ上の理由から`conhost.exe`に主要機能が移管されました。
NT系およびWindows CEでは、スクリーンバッファは1文字あたり4バイト(文字コード2バイト、属性2バイト)で構成されます。文字は16ビット
Unicode (UTF-16) でエンコードされます。コンソールAPIには、
Unicode版とANSIマルチバイト文字セット (MBCS) 版の2種類が用意されており、後方互換性が確保されています。
まとめ
Win32コンソールは、Windowsにおける重要なテキストベースのインタフェースであり、その歴史と実装は複雑な側面を持っています。
コンソールアプリケーションの動作を支える基盤技術として、システム開発者にとっては必須の知識と言えるでしょう。
関連項目
シェル
外部リンク
Console Reference - Windows Console | Microsoft Docs