2011-10-15 14 views
5

vorrei scrivere qualcosa di simile aColorize uscita stdout a Windows cmd.exe dalla console C++ app

cout << "this text is not colorized\n"; 
setForeground(Color::Red); 
cout << "this text shows as red\n"; 
setForeground(Color::Blue); 
cout << "this text shows as blue\n"; 

per un C++ programma di console in esecuzione sotto Windows 7. Ho letto che globale in primo piano & sfondo può essere cambiato dalle impostazioni di cmd.exe, o chiamando system() - ma c'è un modo per cambiare le cose a livello di personaggio che possono essere codificate in un programma? All'inizio pensavo "sequenze ANSI", ma sembra che siano perse da tempo nell'arena di Windows.

+0

Utilizzare SetConsoleTextAttribute(). –

risposta

9

È possibile utilizzare la funzione SetConsoleTextAttribute:

BOOL WINAPI SetConsoleTextAttribute(
    __in HANDLE hConsoleOutput, 
    __in WORD wAttributes 
); 

Ecco un breve esempio che si può dare un'occhiata.

#include "stdafx.h" 
#include <iostream> 
#include <windows.h> 
#include <winnt.h> 
#include <stdio.h> 
using namespace std; 

int main(int argc, char* argv[]) 
{ 
    HANDLE consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE); 
    cout << "this text is not colorized\n"; 
    SetConsoleTextAttribute(consolehwnd, FOREGROUND_RED); 
    cout << "this text shows as red\n"; 
    SetConsoleTextAttribute(consolehwnd, FOREGROUND_BLUE); 
    cout << "this text shows as blue\n"; 
} 

Questa funzione ha effetto sul testo scritto dopo la chiamata di funzione. Quindi, alla fine, probabilmente vorrai ripristinare il colore/gli attributi originali. È possibile utilizzare GetConsoleScreenBufferInfo per registrare il colore iniziale proprio all'inizio ed eseguire un reset w/SetConsoleTextAttribute alla fine.

+0

Grazie - accetto se riesco a farlo funzionare – tucuxi

+0

Funziona come un fascino. Non sapevo che era così facile. – tucuxi