Захват эффектов SetConsoleTextAttribute при перенаправлении через канал? - PullRequest
1 голос
/ 06 февраля 2010

Я перенаправил stdout дочернего процесса, порожденного CreateProcess, в канал. Он работает нормально, за исключением того, что, насколько я могу судить, никакой информации об изменении цвета не поступает. Дочерний процесс использует SetConsoleTextAttribute для изменения цвета текста - возможно ли это определить через канал и, если да, то как?

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

Это на C с Win32 API на XP и Vista.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2010

Там может быть работа вокруг ... его старый и неиспользованный много!

  1. Используйте Ansi.Sys и загрузите его.
  2. Всякий раз, когда вы выводите текст на консоль, используя последовательность Escape, вы можете установить цвет вокруг текста.
  3. Затем разберите escape-последовательности в эквивалент для RichText Colours.

escape-последовательности являются стандартными здесь . Здесь - как добавить поддержку ANSI.SYS в консоль. И здесь является официальным KB от Microsoft о том, как это сделать.

Например:

printf("\x1b[33;43Yellow on Blue\x1b[0\n");

Теперь проанализируйте бит после \x1b[, 33 - желтый передний план, а 43 - синий фон, затем найдите соответствующий цвет и установите его в RichTextBox ..

Примечание: \x1b[0 отключает атрибут.

Редактировать: Возможно, это не лучшее решение, так как это для 16-битной DOS command.com устаревшей NTVDM под XP или более поздней версией. Но, тем не менее, я нашел другую ссылку на « ansicon », которая предназначена для 32-битной консоли pure cmd.exe с поддержкой ANSI.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

0 голосов
/ 06 февраля 2010

Возможно, вам нужно использовать ReadConsoleOutput (и / или связанные с ним), найденные здесь: http://msdn.microsoft.com/en-us/library/ms682073(VS.85).aspx.

Надеюсь, это поможет.

...