c++ - 程序运行时隐藏控制台的独立于平台的方法

标签 c++ console cross-platform platform-independent

我正在寻找一种在我的程序中隐藏控制台(在 Windows 中)的方法,并且我发现了以下代码:

#if defined (__WIN32__)
    #include <windows.h>
    HWND hWnd = GetConsoleWindow();
    ShowWindow(hWnd, SW_HIDE);
#endif

但是,codeblocks 不断给我错误:预期的构造函数、析构函数或“(”标记之前的类型转换。我做错了什么?

在 mac 和 linux 中隐藏控制台的代码是什么?我不经常使用 mac 或 linux,但我想让我的程序独立于平台。有没有适用于所有平台的代码?编译时控制台是否会在 mac 和 linux 中显示?

最佳答案

一般来说,控制台应用程序不应该弄乱它们的窗口。如果您需要更高级的东西(显示/隐藏窗口,决定其大小,...)您可能应该切换到 GUI 应用程序。即使您只是不想要任何窗口,这也是正确的:创建 GUI 应用程序而不创建窗口。

在 Mac 和 Linux 上,启动可执行文件时默认不显示控制台(GUI 和控制台可执行文件之间没有区别);如果您在终端中启动它,应用程序对其没有太多控制权(除非它使用转义码,但它们用于控制文本格式/定位)。您可以使用一些启发式方法来猜测所使用的终端模拟器并告诉它隐藏,但它很丑陋、很麻烦,而且再次违背了控制台应用程序的目的。

就您的代码片段而言,您不能将 #include 放入函数体内:您应该将其分成两部分:

在文件顶部:

#ifdef __WIN32__
    #define _WIN32_WINNT 0x0500
    #include <windows.h>
#endif

函数体内:

#ifdef __WIN32__
    ShowWindow(GetConsoleWindow(), SW_HIDE);
#endif

关于c++ - 程序运行时隐藏控制台的独立于平台的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6727709/

相关文章:

c++ - 如何不覆盖 MAP C++ 中的现有数据?

c++ - 如何在 XCode 7 中应用支持 OpenMP

c++ - 粘贴带有语法颜色和对齐方式的代码

javascript - 有没有办法在 javascript 控制台中将上下文更改为 iframe?

自动关闭控制台的C++代码

embedded - 将 Windows 软件移植到嵌入式/实时操作系统

c++ - 具有 float 的 C++ 程序的输出是否可预测?

c++ - 是否可以使用 asio basic_stream_socket(或存在等效项)写入文件?

Node.js:如何从模块中获取需要函数的文件名?

xamarin - 如何在 Xamarin.Forms 中检测设备的屏幕方向?