windows10 C++ コマンドプロンプトで実行した時に文字色・背景色を変える

環境

やりたいこと

C++のソースにエスケープシーケンスを使って、ansiカラーを出力させる

#include <iostream>
using namespace std;

int main() {
 printf("\033[33m"); /* 文字色黄色 */
 cout << "HELLO" << endl;

 printf("\033[0m"); /* 色の初期化 */
 cout << "HELLO" << endl;
}

エスケープシーケンスでできること、色について

エスケープシーケンスとは、エスケープコードで始まる文字列で
その中で、ANSIエスケープコードを使って色を変える

  • ANSIエスケープコードのフォーマット
ESC[n1;n2;...X
  • ESCの8進、16進変換
¥033 : 8進数で表記
¥x1b : 16進数で表記

参考

実行してもうまくいかない。

上手く読み込まれず、色のコードがそのまま文字列として出力される
f:id:meikotan:20170223122922j:plain

エスケープシーケンスを読み込むために ansicon を使う

windows xp 以下は System32¥config.nt というファイルに設定を追加するだけで
エスケープシーケンスが読み込めてたみたいだけど
windows10には config.nt 設定ファイル自体が存在しない。

ansiconを使う

以下のサイトを参考にしました。

ansiconをインストールする。
  1. アーカイブを展開
  2. 任意の場所にコピー。
Pathを通して、実行コマンドの前に「ansicon」コマンドを追加する。

※参考サイトにあるAutoRunレジストリエントリはよく理解できなかったので、使わない。

Project.exe の実行

ansicon Project

f:id:meikotan:20170223122946j:plain


ほかに出来ること。

printf("¥033[2J"); /* 画面をクリア */
printf("¥033[5;10H"); /* カーソルを移動 */
printf("\033[33m"); /* 文字色を黄色に */
printf("Hello!¥n"); /* メッセージを出力 */

printf("Press [Enter]...¥n"); /* メッセージを出力 */
(void)getchar(); /* キー入力を待つ */
printf("¥033[93m"); /* 文字色を標準に */