Originariamente inviato da Stefano_1986_
cavolo, mi è proprio sfuggito...
ho scritto questo:
codice:
int GetCurrentColor(){
    HANDLE hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
    if( hStdOut==NULL ){
        cerr<<"Impossibile ottenere un handle alla console.\n";
        return 7; // colore standard del dos: testo grigio chiaro e sfondo nero
    }
    CONSOLE_SCREEN_BUFFER_INFO x;
    if( GetConsoleScreenBufferInfo(hStdOut, &x) == 0 ){
        cerr<<"GetConsoleScreenBufferInfo fallita.\n";
        return 7;
    }
    return x.wAttributes;
}
funziona!
qualche suggerimento per migliorarlo?
Non mi pare che ci siano margini di miglioramento... fa già il suo lavoro egregiamente.
L'unica cosa che ti potrei suggerire è di raggruppare tutte queste funzioni in una classe che richiamerà GetStdHandle solo al momento della costruzione.
altra domanda:
come cambio il colore di sfondo senza cambiare il colore del carattere?
Ti basta ottenere gli attributi correnti, effettuarne l'AND con tutti gli attributi di sfondo (in modo da eliminare gli attributi del colore di primo piano), effettuarne l'OR con i nuovi attributi di primo piano e richiamare SetConsoleTextAttribute con questo nuovo valore.