如何读取 Windows GUI 应用程序的控制台输出?

dzz*_*dzz 14 windows console

如果我没记错的话,Windows 应用程序可以编译为控制台或 GUI 应用程序。主要区别之一是控制台应用程序会自动获取控制台,而 GUI 应用程序则不会(尽管如果需要,它们可以通过调用 来获取控制台AllocConsole)。

常识表明,如果您使用GUI 应用程序printfstd::cout从 GUI 应用程序,该输出将无处可去,因为没有控制台可以将其打印到。但我知道可以读取它,因为当我使用 Wine 从 Linux 上的终端运行某些应用程序时,我可以读取printf类似函数的输出。(是的,我确定是应用程序打印的,而不是 Wine。)

我怎样才能在 Windows 上做到这一点?我尝试过DebugView,尽管它显示了一些来自应用程序的调试文本,但它显示的内容不如 Wine 那么多,可能是因为 DebugView 仅限于调用OutputDebugString.

小智 9

调用它以gui_application.exe > output.txt使标准输出进入文件

调用它以gui_application.exe > output.txt 2>&1使 stdout 和 stderr 进入文件

如果您使用的是 Windowsstart命令,您需要记住它start本身就是一个应用程序,因此start /wait gui_application.exe > output.txt不会执行您想要的操作,因为它正在重定向start.

但是您可以转义相关值:

调用它以start /wait gui_application.exe ^> output.txt使标准输出进入文件

调用它以start /wait gui_application.exe ^> output.txt 2^>^&1使 stdout 和 stderr 进入文件