通过管道重定向时捕获SetConsoleTextAttribute的效果?

我已经将使用CreateProcess生成的子进程的stdout重定向到管道。 它的工作正常,但据我所知,没有关于颜色变化的信息正在传递。 子进程正在使用SetConsoleTextAttribute来更改文本颜色 – 是否可以通过管道检测到这一点,如果是,如何检测?

我最终在RichEdit控件中显示输出,我想尽可能捕获颜色信息。

这是在C和XP和Vista上的Win32 API。

您可能需要使用此处的ReadConsoleOutput(和/或相关的): http : //msdn.microsoft.com/en-us/library/ms682073 (VS.85) .aspx 。

希望有所帮助。

可能有一个工作……它的旧的和未使用的很多!

  1. 使用Ansi.Sys并加载它。
  2. 每当您向控制台输出文本时,通过使用转义序列,您可以在文本周围设置颜色。
  3. 然后将转义序列解析为RichText Colors的等效序列。

转义序列是这里的标准。 以下是如何将ANSI.SYS的支持添加到控制台中。 以下是Microsoft如何执行此操作的官方KB。

举个例子:

 printf(“\ x1b [33; 43yellow on Blue \ x1b [0 \ n”);

现在,在\x1b[ ,33为黄色前景,43为蓝色背景后解析位,然后查找相关颜色并将其设置在RichTextBox中。

注意: \x1b[0关闭属性。

编辑:这可能不是最好的解决方案,因为在XP或更高版本下传统NTVDM的16位DOS command.com。 但是,我在这里找到了另一个’ ansicon ‘的链接,这个链接适用于支持ANSI的纯cmd.exe 32位控制台。

希望这会有所帮助,最好的问候,汤姆。