2011-02-07 8 views
6

system("color 24");を使用しようとしましたが、プロンプトの色が変わっていません。グーグルグーグルの後に私はSetConsoleTextAttributeを見て、以下のコードを書きました。Windowsのstdout/stderrのテキストの色を設定する

この結果、stdoutの代わりにstdoutstderrの両方が赤色になり、が赤色になります。

どうすれば解決できますか?私のプロンプトも赤色になりましたが、私はそれを修正する方法を知っているので、私はそれを気にしません。

は、各出力の前に色を設定してください、私は(VS 2010のCLを使用して)プロンプトからこれを構築し、定期的なcmdプロンプト

#include <windows.h> 
#include <stdio.h> 
int main(int argc, char **argv) 
{ 
    int i; 
    unsigned long totalTime=0; 


    HANDLE hConsoleOut; //handle to the console 
    hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE); 
    SetConsoleTextAttribute(hConsoleOut, FOREGROUND_GREEN); 

    HANDLE hConsoleErr; 
    hConsoleErr = GetStdHandle(STD_ERROR_HANDLE); 
    SetConsoleTextAttribute(hConsoleErr, FOREGROUND_RED); 

    fprintf(stdout, "%s\n", "out"); 
    fprintf(stderr, "%s\n", "err"); 
    return 0; 
} 

答えて

5

MSDN GetStdHandle()のドキュメントによれば、この関数はハンドルを同じアクティブコンソール画面バッファに返します。したがって、これらのハンドルを使用して属性を設定すると、常に同じバッファが変更されます。このため、出力デバイスの右端の色を指定する必要があります。

/* ... */ 

HANDLE hConsoleOut; //handle to the console 
HANDLE hConsoleErr; 
hConsoleErr = GetStdHandle(STD_ERROR_HANDLE); 
hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE); 
SetConsoleTextAttribute(hConsoleOut, FOREGROUND_GREEN); 
fprintf(stdout, "%s\n", "out"); 

SetConsoleTextAttribute(hConsoleErr, FOREGROUND_RED); 
fprintf(stderr, "%s\n", "err"); 
return 0; 
+0

私はそれを試みました。受け入れられた –

0

でそれを実行している現時点でのWindows 7で動作するはず。コードの重複を避けるために関数内で行うことができます。

5

エラーと通常のコンソール出力のハンドルは同じです。それと同じように、同じコンソールウィンドウを指しています。コンソールの色を変更すると、その後に書かれたすべてのテキストに適用されるので、出力の直前で色を変更する必要があります。あなたが出力するすべてのテキストに対してそれをしたくない場合は、別の関数に呼び出しをパックします。

関連する問題