Win32コンソール

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索
Win32コンソールウィンドウを用いるWindows Vista上のWindows PowerShell

Win32コンソール英語: Win32 console)はWindows APIのシステムに実装されているテキストユーザーインターフェイスで、コンソールアプリケーションの動作を担う。Win32コンソールはスクリーンバッファと入力バッファを備え、ウィンドウまたはテキストモード画面をAlt+ Enterキーで切り替えることができる。

Win32コンソールは基本的に画像の表示を必要としないアプリケーションに使われるが、表示色を変更することはできる。コマンドラインインターフェイスツールを含む例として、Windows コマンドプロンプトWindows PowerShellなどのコマンドラインインタープリターFAR ManagerMidnight Commanderといったファイルマネージャー、MS-DOS Editorなどのテキストエディターが存在する。

ウィンドウモードと全画面モード[編集]

Win32コンソールアプリケーションは2つのモードで動作する。

1つはウィンドウの中にテキストを表示するもので、オペレーティングシステムのフォントレンダリングを使用する。このモードでは、アプリケーションとユーザーとの仲介はウィンドウシステムによって制御される。これはXtermといったX Window Systemアプリケーションに類似している。

全画面モードWin32コンソールはハードウェアテキストモードで、ビデオカードのラスターフォントで描画を行う。これはテキストシステムコンソールに類似する。全画面モードではいかなるグラフィックドライバーがインストールされていても、Windows標準のVGAドライバーを使用する[1]。そのため、VGA互換テキストモードしかサポートせず、最大表示文字数は英語モードの場合で80字×28行に制限されている[2]。この点は、Linuxなどの他のオペレーティングシステムではドライバー次第でより高解像度なコンソールを表示できることとは対照的である。このモードはWindows VistaWDDMがVGAモードをサポートしなくなったことにより廃止された[3]

詳細[編集]

プログラムはWin32コンソールに高水準ファンクション (ReadConsole, WriteConsole) または低水準ファンクション (ReadConsoleInput, WriteConsoleOutput) のどちらからもアクセスできる。これら高水準ファンクションはGDIより限定的で、例えばプログラムからカラーパレットを変更することはできず[4]、またこれらのファンクションを使ってコンソールで使用されるフォントを変更することもできない。

Win32コンソールプログラムは、見掛け以上のものを理解しないユーザなどはしばしば、MS-DOSアプリケーションと混同する。しかし、「Win32」という名前の通り、WindowsNTネイティブなシステムの一部ないし一形態であり、全く異なったものである。

なお、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コンソールの役割を担っていたが[5]Windows Vistaからは脆弱性対策で主要な機能はconhost.exeに移された。

WIndows NT系およびWindows CEでは、スクリーンバッファは画面文字単位あたり4バイトで、文字コードに2バイト、属性に2バイトで構成されている[6]。文字は16ビットUnicodeにエンコードされる。後方互換性のため、コンソールAPIにはUnicodeと非Unicodeの2種類が用意されている。

関連記事[編集]

脚注[編集]

  1. ^ VGA-Compatible Video Miniport Drivers, (2012-10-16), http://msdn.microsoft.com/en-us/library/windows/hardware/ff570169(v=vs.85).aspx 2012年11月14日閲覧。 
  2. ^ Julio Sanchez; Maria P. Canton (2003), “VGA Fundamentals, Part II: DOS Graphics”, The PC Graphics Handbook (for C++ Programmers) (Book), CRC Press, p. 125, ISBN 0849316782 
  3. ^ Some 16-bit DOS-based Programs and the Command Prompt will not run in full-screen mode in Windows Vista and in Windows 7”. Support. Microsoft (2011年9月23日). 2016年7月6日閲覧。
  4. ^ Windows Vista以降ではSetConsoleScreenBufferInfoEx ファンクションでカラーパレットを指定できる。SetConsoleScreenBufferInfoEx function (Windows)を参照。
  5. ^ マイクロソフト セキュリティ アドバイザリ 928604:Windows 2000 の Workstation サービスに影響を与える悪用コードの公開 (英語のみ)”. Microsoft (2006年11月17日). 2016年7月7日閲覧。英語の文書のみ、CSRSSの説明が記載されている。
  6. ^ Console Reference”. Microsoft (2009年). 2010年1月1日閲覧。

外部リンク[編集]