 以降の32BitのWindows
 以降の32BitのWindows  ではいわゆるDOS窓、すなわちコマンドプロンプト
 ではいわゆるDOS窓、すなわちコマンドプロンプト  では、エスケープシーケンス
 では、エスケープシーケンス  【G  】をサポートしていませんね。
 【G  】をサポートしていませんね。身近で(学生さんが)Cのプログラム
 でシェル(DOS窓  )場の文字
 でシェル(DOS窓  )場の文字  をエスケープシーケンスで色を変えたいんですけど・・という相談がありました。いろいろ情報
 をエスケープシーケンスで色を変えたいんですけど・・という相談がありました。いろいろ情報  もあるのですが、大事な部分が抜けています。
 もあるのですが、大事な部分が抜けています。Windows側では、16ビット
 のプログラムを起動する前には必ず仮想DOS  上のドライバー
 のプログラムを起動する前には必ず仮想DOS  上のドライバー  等の組み込み
 等の組み込み  を行う仕組みなんですがこれが、
 を行う仕組みなんですがこれが、1.DOSプログラムの場合 -> C:¥SysemRoot¥System32¥CONFIG.NT |C#V| AUTOEXEC.NT
2.Windowsプログラムは -> C:¥SysemRoot¥System32¥CONFIG.WOW |C#V| AUTOEXEC.NT
となります。
ですから、DOSプログラムを処理する場合には、CONFIG.NT にはNECのPC9801
 と違って、ansi.sysを組み込んでやる必要があります。
   と違って、ansi.sysを組み込んでやる必要があります。ファイル
 の最後の方に・・
 の最後の方に・・device=%SystemRoot%¥system32¥ANSI
 .SYS
 .SYSdosonly
を入れましょう。
ここからが大事なんですが、16ビットのDOSプログラムを起動すると自動的に認識してくれますが、Cコンパイラ
 が32ビット
 が32ビット  の場合には、DOS窓(command.com)ではなくて、CMD.EXE が起動されるでしょう。
 の場合には、DOS窓(command.com)ではなくて、CMD.EXE が起動されるでしょう。したがって、明示的
 にCOMMAND.COM
 にCOMMAND.COM  を起動した方が確実です。
 を起動した方が確実です。このDOS窓から、コマンドライン
 でプログラムを起動するとエスケープシーケンスが効いているはずです。ためしに次のコマンド
 でプログラムを起動するとエスケープシーケンスが効いているはずです。ためしに次のコマンド  を入力
 を入力  して見て
 して見て  ください。
 ください。PROMPT=[$p]% $e[33m
DIR
これで、プロンプトの色等が変化していればOKです。
注意
 ですが、command.com は16ビット用ですから通常
 ですが、command.com は16ビット用ですから通常  の終了をするとかなりWindowsのほうで処理を考え込んでしまいます。笑
 の終了をするとかなりWindowsのほうで処理を考え込んでしまいます。笑これを終了するときにもコマンドライン上から、EXIT
 で抜けてください。ここが肝心です。:P
  で抜けてください。ここが肝心です。:P

















スポンサードリンク