c++ - WIN32 : Need Help With stdout Redirect on Hybrid Console + GUI App

标签 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 文件。它一路上迷路了。有没有办法拥有像我一样的混合应用程序并仍然保留任何命令行重定向?

最佳答案

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

编辑:假设您的应用程序使用现有控制台(cmd.exe 等)的参数运行,上述内容是正确的。但是,情况可能并不总是如此 - 它可能会使用来自快捷方式、任务计划程序、另一个进程等的参数来运行。在这种情况下,AttachConsole 将失败,当发生这种情况时,您应像以前一样调用 AllocConsole

关于c++ - WIN32 : Need Help With stdout Redirect on Hybrid Console + GUI App,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6698735/

相关文章:

c++ - LOWORD 和 HIWORD 操作

c++ - Winapi:屏幕截图未显示在窗口上

c++ - fstream .open() Win32

java - 框布局可以接受包含元素的大小吗?

java - 我在 Xoom 上的 UI 看起来很难看/不像在 eclipse 中的样子

c++ - 如何将 C++ 代码连接到应用程序?

c++ - 回收未使用的 vector

c++ - 查找正在运行的进程EXE存放在什么目录

python - 为 GUI 开发设置 PySide/Qt

c++ - 在新行上拆分字符