我想调用_popen从可执行文件中获取结果,但它是在消隐。
我查看调试器,发现程序使用Kernel32.WriteConsoleW将unicode字符串写入控制台,而不是使用stdout。
如何捕获它?
答案 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。