通过管道重定向时捕获 SetConsoleTextAttribute 的效果?
我已将使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
也许有一个解决办法......它很旧并且没有太多使用!
转义序列是此处的标准序列。 这里是如何添加对 ANSI.SYS 的支持进入控制台。 此处是 Microsoft 提供的有关如何执行此操作的官方知识库。
举个例子:
现在,解析
\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!
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:
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.
您可能需要使用此处找到的 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.