管道使用WriteConsole的程序

use*_*987 5 c++ stdout pipe

我想调用_popen从可执行文件中获取结果,但它是在消隐.

我查看调试器,发现程序使用Kernel32.WriteConsoleW将unicode字符串写入控制台,而不是使用stdout.

我该如何捕获它?

Fel*_*bek 5

生成的任何输出都WriteConsole不会写入重定向管道。如果向 提供了管道、文件或除控制台之外的任何其他内容的句柄WriteConsole,它将失败并显示ERROR_INVALID_HANDLE(6)。

来自MSDN 上的高级控制台输入和输出函数

ReadConsole 和 WriteConsole 只能与控制台句柄一起使用;ReadFile 和 WriteFile 可以与其他句柄(例如文件或管道)一起使用。如果与已重定向且不再是控制台句柄的标准句柄一起使用,ReadConsole 和 WriteConsole 将失败。


Nor*_*elm 0

您应该能够重定向子进程的输出。

查看使用重定向的输入和输出创建子进程

此外,应用程序可能使用 STD_ERROR_HANDLE 而不是 STD_OUTPUT_HANDLE。