c++ - 是否可以将 Windows 控制台应用程序与 Windows GUI 应用程序一起运行?

标签 c++ winapi user-interface console cout

我想做的是在同一个程序中包含我的 Windows GUI 应用程序和 Windows 控制台应用程序。所以我显示了我的 GUI 应用程序,但我可以输出 std::cout 到控制台窗口。 我会输出变量值等内容。

最佳答案

这是可能的,您必须记住控制台链接目标是指自动创建控制台的 32 位应用程序,它们与 GUI 相同,因此您会看到它是“自动创建的”,这意味着您可以执行相同的操作手动。

您可以制作带有 GUI 的控制台应用程序或带有控制台的 GUI 应用程序,这取决于您,我个人会制作带有 GUI 的控制台应用程序,因为您可以将 GUI 放入单独的线程中,即使是确保控制台始终在那里,因此您也有机会捕获 fatal error 。

这是从我自己的一个项目中截取的代码,它不完全是你想要做的,但非常相似

    if (!AttachConsole(ATTACH_PARENT_PROCESS) ||\
        GetLastError()==ERROR_NOT_SUPPORTED ||\
        GetLastError()==ERROR_INVALID_HANDLE)
    {
        if (!AllocConsole())
        {
// in this case we failed to alloc a console
// fatal error?
        }
    }
// at this point you already have a console or you created one
    SetConsoleTitle("caption");     // you can set the console caption if you want to
    freopen("CON","w",stdout);
    SetConsoleOutputCP(CP_UTF8);    // also this is needed when you want to use UTF8

AttachConsole是一种特殊情况,当您想从 cmd.exe 或另一个控制台应用程序启动您的应用程序时,这意味着它将继承控制台,据我所知,您不能拥有多个控制台,因此如果您的进程继承了一个(例如,您已经有一个)你不能分配一个新的,函数将失败并且什么都不会发生。如果您从来没有在这种情况下运行您的应用程序,那么您不需要这部分,尽管我认为这比这要复杂得多,因为 Visual Studio 可以将您的控制台输出附加到它的日志窗口意味着它实际上是一个漂亮的“免费”调试工具。但我不确定它是否有效,从未尝试过。

AllocConsole可能会失败,因此您还应该检查这种情况,在该部分之后,您要么拥有自己的新控制台,要么以某种方式从另一个应用程序继承,这是最重要的部分!您必须重新打开标准输出,以便系统知道标准输出应该进入这个控制台。

关于c++ - 是否可以将 Windows 控制台应用程序与 Windows GUI 应用程序一起运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23457228/

相关文章:

c++ - 在QT5中,如何在子菜单项的点击事件上打开新窗口?

c++ - 从 Alt + Tab 获取所有窗口,不包括 Metro 窗口 - Windows 8/8.1

c++ - CUDA 点积

java - JNI 检测到应用程序错误 : use of invalid jobject when calling NewObject for innerclass

C++ - RegCreateKeyEx 成功但没有结果

IOS App Templates Shop(UI设计)

python - QThread 到 QProcesses 的信号/槽

html - 在网页内运行 Perl/TK GUI

c++ - doxygen 中引用运算符的问题

c# - 如何从 C# 或 VB.Net 使用 Win32 'DwmSetIconicThumbnail'?