WIN32:在混合控制台+ GUI应用程序上需要有关stdout重定向的帮助

时间:2011-07-14 19:17:23

标签: c++ winapi user-interface console stdout

我有一个C ++ Win32应用程序,如果使用命令行参数运行,则作为控制台应用程序运行,但如果没有命令行参数,则作为窗口应用程序运行。我使用此方法使用AllocConsole()和STD_OUTPUT_HANDLE创建控制台:

http://www.halcyon.com/~ast/dload/guicon.htm

我的切入点是wWinMain(unicode WinMain)。

它几乎效果很好。如果我运行app.exe param1,我得到控制台,没有GUI窗口。如果我运行没有参数的app.exe,它会启动GUI并快速移动而没有控制台。

缺少一件事。

如果我运行app.exe param1> output.txt,stdout输出不会重定向到output.txt文件。它一路上都迷路了。有没有办法像我一样拥有一个混合应用程序,仍然保留任何命令行重定向?

2 个答案:

答案 0 :(得分:2)

首先尝试以ATTACH_PARENT_PROCESS(值-1)作为参数调用AttachConsole。这会将您的应用重定向到运行它的控制台,因此允许> output.txt获取它输出的任何内容。否则,不会捕获输出,因为使用了两个不同的控制台 - 您的应用程序已运行的控制台,以及它已创建的控制台。重定向到文件的工作在第一个,而您的应用输出到第二个。

编辑:以上是正确的,假设您的应用程序使用现有控制台(cmd.exe左右)的参数运行。但是,情况可能并非总是如此 - 它可能使用快捷方式,任务调度程序,另一个进程等参数运行。在这种情况下,AttachConsole将失败,当发生这种情况时,您应该调用{ {1}}和以前一样。

答案 1 :(得分:1)

我认为您的问题是由我的这个问题中的代码处理的:Where do writes to stdout go when launched from a cygwin shell, no redirection

(我的问题是关于一个奇怪的角落案例)