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

发布于 2024-08-20 10:30:44 字数 286 浏览 5 评论 0原文

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

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

这是在 XP 和 Vista 上使用 C 语言编写的 Win32 API。

I've redirected stdout of a child process spawned with CreateProcess to a pipe. It works fine except that, as far as I can tell, no information about color changes are coming through. The child process is using SetConsoleTextAttribute to change the text color--is it possible to detect this through the pipe and, if so, how?

I'm ultimately displaying the output in a RichEdit control and I would like to capture the color information if at all possible.

This is in C with the Win32 API on XP and Vista.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蓝天白云 2024-08-27 10:30:45

也许有一个解决办法......它很旧并且没有太多使用!

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

转义序列是此处的标准序列。 这里是如何添加对 ANSI.SYS 的支持进入控制台。 此处是 Microsoft 提供的有关如何执行此操作的官方知识库。

举个例子:

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

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

< strong>注意: \x1b[0 关闭该属性。

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

希望这有帮助,
此致,
汤姆.

There maybe a work around...its old and not-used much!

  1. Use Ansi.Sys and load that.
  2. Whenever you output a text to the console, by using the Escape sequence, you can set a color around the text.
  3. Then parse the escape sequences into the equivalent for RichText Colors.

The escape sequences are standard here. Here is how to add support for ANSI.SYS into the console. And here is the official KB from Microsoft on how to do this.

For an example:

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

Now, parse the bit after the \x1b[, 33 is yellow foreground, and 43 is blue background, then look up the relevant color for that and set it in the RichTextBox..

Note: \x1b[0 turns off the attribute.

Edit: This may not be the best solution as that's for legacy NTVDM's 16bit DOS command.com under XP or later. But however, I found another link to 'ansicon' here which is for pure cmd.exe 32bit console, with ANSI support.

Hope this helps,
Best regards,
Tom.

夕色琉璃 2024-08-27 10:30:44

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

希望有帮助。

You probably need to use ReadConsoleOutput (and/or related ones) found here: http://msdn.microsoft.com/en-us/library/ms682073(VS.85).aspx.

Hope that helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文