2009-10-07 1 views
8

this question과 비슷하지만 WPF 응용 프로그램에서 래핑 된 콘솔 프로그램이 컬러 출력을 생성한다는 점을 제외하면 색뿐만 아니라 텍스트도 캡처 할 수 있으면 좋을 것입니다.컬러 콘솔 출력을 WPF 응용 프로그램에 캡쳐

이것은 내 첫 번째 WPF 프로그램이며 올바른 컨트롤을 찾고/수정하는 방법을 모르겠다. 현재는 작동하는 TextBox를 사용하고 있지만 일반 텍스트 만 캡처합니다.

업데이트 : 그것은 단지 일반 텍스트를 보였다 아아

richTextBox.Document.Blocks.Clear(); 
richTextBox.Document.Blocks.Add(new Paragraph(new Run(process.StandardOutput.ReadToEnd()))); 

: 나는하여 RichTextBox를 사용했습니다.

+0

이 작업을 수행 할 수 있었습니까? 현재 비슷한 것을 시도하고 있는데 아래에 나열된 답변을 시도했지만 스트림에서 나오는 데이터의 제어 코드를 볼 수 없었습니다. –

+0

안녕하세요, 아담, 아니요, 다른 개발자가 콘솔 프로그램을 삭제했으며 더 이상 관리하지 않습니다. – si618

+0

TextBox 대신 RichTextBox를 살펴 보았습니까? – viggity

답변

13

내가 제대로하고 싶은 것을 이해했다면 콘솔에서 실행되는 레거시 앱을 스크랩하여 yourprocess.StandardOutput을 통해 WPF 앱의 컨트롤에서 콘솔 출력을 가져와야합니다.

콘솔에서 가져올 색상 데이터 (및 형식)는 ANSI입니다. 이것은 리디렉션 된 콘솔 텍스트의 제어 문자 형식으로 표시되며 확장 된 ASCII 문자와 숫자로 표시됩니다. ANSI 인터프리터 컨트롤을 사용하여이를 다시 컬러 데이터로 변환해야합니다. 나는 쉽게 적응할 수 있어야하는 몇 가지 ANSI 터미널 컨트롤이 있음을 알고 있습니다. - 코드 프로젝트의 this one은 ANSI 포맷을 처리 할 수 ​​있지만 연결을 처리하도록 설계된 전체 ANSI 터미널입니다. 터미널을 바꿔야 할 수도 있습니다 yourprocess.StandarOutput.ReadToEnd()에 의해 반환 된 문자열을 표시 할 수있는 코드의 일부.

Here are the ANSI/VT100 control codes 자신 만의 포맷터를 쓰고 싶을 때 필요합니다.

+0

+1 감사합니다. 조사 할 것입니다. FWIW는 실제로 레거시 앱이 아니라 콘솔이 데이터베이스 설치 및 업그레이드를 수행하는 클래스 라이브러리를 감싸는 래퍼입니다. 그것은 까다로운 변수들을 파싱하는 쉬운 방법 일뿐입니다. 우리는 콘솔을 설치용 Wix DTF 사용자 지정 작업의 일부로 사용하며 WPF 프로젝트는 개발자가 콘솔 응용 프로그램을 쉽게 사용할 수 있도록합니다. – si618