通过管道重定向时捕获SetConsoleTextAttribute的影响?

时间:2010-02-06 01:19:42

标签: c winapi colors pipe redirect

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

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

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

2 个答案:

答案 0 :(得分:0)

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

希望有所帮助。

答案 1 :(得分:0)

可能有一种解决方法......它的旧的和未使用的很多!

  1. 使用Ansi.Sys并加载。
  2. 每当您向控制台输出文本时,通过使用转义序列,您可以在文本周围设置颜色。
  3. 然后将转义序列解析为RichText Colors的等效项。
  4. 转义序列是标准hereHere是如何在控制台中添加对ANSI.SYS的支持。 here是微软公司关于如何执行此操作的官方KB。

    举个例子:

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

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

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

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

    希望这有帮助, 最好的祝福, 汤姆。