2011-10-15 35 views
5

Tôi muốn viết một cái gì đó tương tự nhưColorize stdout đầu ra cho Windows cmd.exe từ giao diện điều khiển C++ ứng dụng

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"; 

cho một giao diện điều khiển C++ chương trình chạy trong môi trường Windows 7. Tôi đã đọc rằng foreground toàn cầu & nền có thể thay đổi từ các thiết lập của cmd.exe, hoặc bằng cách gọi hệ thống() - nhưng có cách nào để thay đổi mọi thứ ở cấp độ nhân vật có thể được mã hóa thành một chương trình không? Lúc đầu, tôi nghĩ rằng "ANSI trình tự", nhưng họ dường như đã mất từ ​​lâu trong lĩnh vực Windows.

+0

Sử dụng SetConsoleTextAttribute(). –

Trả lời

9

Bạn có thể sử dụng chức năng SetConsoleTextAttribute:

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

Dưới đây là một ví dụ ngắn gọn mà bạn có thể có một cái nhìn.

#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"; 
} 

Chức năng này ảnh hưởng đến văn bản được viết sau khi gọi hàm. Vì vậy, cuối cùng bạn có thể muốn khôi phục về màu/thuộc tính ban đầu. Bạn có thể sử dụng GetConsoleScreenBufferInfo để ghi lại màu ban đầu ngay từ đầu và thực hiện đặt lại w/SetConsoleTextAttribute ở cuối.

+0

Cảm ơn - sẽ chấp nhận nếu tôi làm cho nó hoạt động – tucuxi

+0

Hoạt động như một sự quyến rũ. Không biết nó thật dễ dàng. – tucuxi

Các vấn đề liên quan