2009-12-26 40 views
5

Ok đây là Ứng dụng Giao diện điều khiển đơn giản mà tôi đã thực hiện để kiểm tra RedirectStandardOutput của số Process.StartInfo.Tại sao RedirectStandardOutput không có mã ANSI cần thiết?

foreach (c In [Enum].GetValues(GetType(ConsoleColor)) 
    { 
     Console.ForegroundColor = c 
     Console.WriteLine("Test") 
    } 

Và bên dưới là kết quả ứng dụng.

Result of the Console Application.

Vì vậy, khi chúng ta có thể nhìn thấy màu sắc hiển thị đẹp trên giao diện điều khiển.

Tuy nhiên, khi tôi đọc StandardOutput.BaseStream không có thông tin về màu sắc, không có mã ANSI, không có gì.

Làm cách nào để nắm bắt thông tin màu trên luồng được chuyển hướng?

+0

Tôi để câu hỏi này mở cho đến khi tôi có thể cung cấp cho tôi câu trả lời hay. –

Trả lời

1

Câu trả lời ngắn gọn là các luồng như được cấp cho bạn bởi lớp .NET Console hoàn toàn dựa trên ký tự và chỉ trả lại dữ liệu văn bản.

Để nhận thông tin màu mở rộng, bạn cần P/Gọi API Win32 ReadConsoleOutput. Điều này sẽ trả lại, trong số những thứ khác, một mảng các cấu trúc COLOR_INFO chứa các thuộc tính màu sắc cho mỗi ký tự. Bạn có thể muốn xem ReadConsoleOutput pinvoke.net page để bắt đầu.

+0

Thật không may đó không phải những gì tôi đang tìm kiếm, vì ReadConsoleOutput đọc toàn bộ màn hình console, trong khi những gì tôi muốn là có thể đọc thông tin màu khi quá trình bàn điều khiển ghi dữ liệu vào stdout (và rõ ràng là stderr) . –

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