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



我有一个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文件。它在路上迷路了。有没有一种方法,有一个混合的应用程序,像我有,仍然保留任何命令行重定向?

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

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

我认为你的问题是由我的这个问题中的代码处理的:从cygwin shell启动到stdout的写入到哪里,没有重定向

(我的问题是关于一个奇怪的角大小写)

最新更新