【问题标题】:Capture coloured console output into WPF application将彩色控制台输出捕获到 WPF 应用程序中
【发布时间】:2010-12-04 11:53:23
【问题描述】:

类似于this question,除了封装在 WPF 应用程序中的控制台程序会产生彩色输出,所以如果我能捕获颜色和文本就更好了。

这是我的第一个 WPF 程序,我不确定如何查找/修改正确的控件,目前我只是使用一个可以工作但只捕获纯文本的 TextBox。

更新:我尝试使用 RichTextBox:

richTextBox.Document.Blocks.Clear();
richTextBox.Document.Blocks.Add(new Paragraph(new Run(process.StandardOutput.ReadToEnd())));

唉,它只显示纯文本。

【问题讨论】:

  • 您是否尝试过查看 RichTextBox 而不是 TextBox?
  • 我看到的第一件事 :) 将用我尝试过的示例更新问题。
  • 将此视为一个起点,而不是一个答案。 Console Screen Buffers 表示您可以通过 GetConsoleScreenBufferInfo 获取此信息。
  • 你能得到这个工作吗?我目前正在尝试做类似的事情,我尝试了下面列出的答案,但无法看到来自流的数据中的任何控制代码?
  • 嗨,亚当,不,控制台程序已被另一位开发人员删除,我不再维护它。

标签: c# .net wpf wpf-controls console-application


【解决方案1】:

如果我理解您想要正确执行的操作,您希望通过yourprocess.StandardOutput 截取在控制台上运行的旧版应用程序并在您的 WPF 应用程序中的控件中获取其控制台输出。

来自控制台的颜色数据(和格式)将是 ANSI。这将以控制字符的形式显示在重定向的控制台文本中,该文本将显示为扩展的 ASCII 字符和数字。您将需要一个 ANSI 解释器控件将其转换回颜色数据。我知道存在几个应该能够轻松调整的 ANSI 终端控件 - 代码项目上的 this one 能够处理 ANSI 格式,但它是一个完整的 ANSI 终端,旨在处理连接 - 您可能需要更换代码的终端部分可以显示yourprocess.StandarOutput.ReadToEnd()返回的字符串。

Here are the ANSI/VT100 control codes,如果您想编写自己的格式化程序,您将需要它。

【讨论】:

  • +1 谢谢你,会调查的。 FWIW,它实际上不是遗留应用程序,而是控制台是执行数据库安装和升级的类库的包装器。这只是解析一些棘手变量的简单方法。我们将控制台用作安装的 Wix DTF 自定义操作的一部分,而 WPF 项目是我们的开发人员也可以轻松使用控制台应用程序的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
  • 2010-09-14
  • 2010-09-16
  • 2016-09-15
  • 1970-01-01
相关资源
最近更新 更多