2009-12-26 2 views
5

여기에 Process.StartInfoRedirectStandardOutput을 테스트하기 위해 만든 간단한 콘솔 응용 프로그램이 있습니다.RedirectStandardOutput에 필요한 ANSI 코드가없는 이유는 무엇입니까?

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

그리고 아래는 적용 결과입니다. 우리가 볼 수

Result of the Console Application.

그래서 색상은 콘솔에 아름답게 보여줍니다.

그러나 StandardOutput.BaseStream을 읽을 때 색상 정보가없고 ANSI 코드도없고 아무 것도 없습니다.

리디렉션 된 스트림의 색상 정보는 어떻게 캡처합니까?

+0

전 누군가가 저에게 좋은 대답을 줄 때까지이 질문을 열어두고 있습니다. –

답변

1

짧은 대답은 .NET Console 클래스에 의해 주어진 스트림이 순전히 문자 기반이며 텍스트 데이터 만 반환한다는 것입니다.

확장 된 색상 정보를 얻으려면 Win32 API ReadConsoleOutput을 P/호출해야합니다. 그러면 각 문자의 색상 속성을 포함하는 COLOR_INFO 구조체 배열이 반환됩니다. 시작하려면 ReadConsoleOutput pinvoke.net page을 확인하십시오.

+0

불행하게도 ReadConsoleOutput은 콘솔 화면을 전체적으로 읽으므로, 콘솔 프로세스가 stdout (그리고 분명히 stderr)에 데이터를 쓰고 있기 때문에 색 정보를 읽을 수 있어야합니다. . –

관련 문제