Захват цветного вывода консоли в приложение WPF - PullRequest
8 голосов
/ 07 октября 2009

Аналогично этот вопрос , за исключением того, что консольная программа, обернутая в приложение WPF, производит цветной вывод, поэтому было бы неплохо, если бы я мог зафиксировать цвет и текст.

Это моя первая программа WPF, и я не знаю, как найти / изменить нужный элемент управления, в настоящее время я просто использую TextBox, который работает, но захватывает только простой текст.

Обновление: я пытался использовать RichTextBox:

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

Увы, он показывал только простой текст.

1 Ответ

13 голосов
/ 09 октября 2009

Если я правильно понимаю, что вы хотите сделать правильно, вы хотите отсканировать экран унаследованного приложения, которое запускается на консоли, и получить его вывод консоли на элемент управления в вашем приложении WPF через yourprocess.StandardOutput.

Цветовые данные (и форматирование), которые будут поступать с консоли, будут ANSI. Это будет отображаться в виде контрольных символов в перенаправленном консольном тексте, который будет отображаться как расширенные символы и числа ASCII. Вам потребуется контроль интерпретатора ANSI, чтобы перевести это обратно в данные цвета. Я знаю, что существует несколько элементов управления терминалом ANSI, которые можно легко адаптировать - этот в проекте кода способен обрабатывать форматирование ANSI, но это полноценный терминал ANSI, предназначенный для обработки соединения - вам может понадобиться заменить терминальную часть кода чем-то, что может отображать строку, возвращаемую yourprocess.StandarOutput.ReadToEnd().

Вот управляющие коды ANSI / VT100 , которые вам понадобятся, если вы хотите написать свой собственный форматер.

...