gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:56:41 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com