管道使用WriteConsole的程序

时间:2011-09-25 03:56:33

标签: c++ stdout pipe

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

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

如何捕获它?

3 个答案:

答案 0 :(得分:3)

使用WriteConsole生成的任何输出都不会写入重定向管道。如果管道或文件的句柄或控制台以外的任何内容都被赋予WriteConsole,则它将失败并显示ERROR_INVALID_HANDLE(6)。

来自MSDN上的High-Level Console Input and Output Functions

  

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

答案 1 :(得分:1)

overkill解决方案:通过在启动时挂接到应用程序来拦截对WriteConsoleW的调用。可能不是你想要的,我相信有一个更简单的方法。但它确实有效:)

答案 2 :(得分:0)

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

查看Creating a Child Process with Redirected Input and Output

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