1

我想执行某个批处理文件并将其控制台输出重定向到 Visual C++ 中的文本控件,或者在显示日志/回声的同时重定向控制台输出。

4

3 回答 3

4

基本上,您必须让运行进程写入管道,并读取该管道的输出。

[编辑] 我知道 SciTE 是如何做到这一点的(您可以查看源代码:win32/SciTEWin.cxx,ExecuteOne 函数),我搜索了一种更通用的方法,发现如何使用Microsoft 本身的重定向标准句柄生成控制台进程.
例如,如果您搜索CreatePipe PeekNamedPipe CreateProcess关键字,您可能会找到其他示例。

于 2008-09-24T10:59:11.157 回答
1

另一种选择是使用Boost.Process (Boost.Process 还不是官方的 Boost C++ 库。必须单独下载和安装)

示例“ Child.4 - 使用异步 I/O 从子进程读取”显示了如何将子进程的输出重定向到 C++ 流(然后访问内容)。

示例“ Child.4 - 使用异步 I/O 从子级读取”展示了如何将 Boost.Process 与Boost.Asio一起使用来访问子级异步 I/ O

这种方法的优点是,Boost.Process 支持 Windows API 和 POSIX API。

于 2008-09-24T13:35:51.560 回答
0

如果优雅不是优先事项,那么一个非常简单的解决方案可能是将输出重定向到文件,然后读入文件内容。

于 2008-09-24T12:05:06.987 回答