程序运行时隐藏控制台的平台无关方式

时间:2011-07-18 00:35:01

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

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

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

然而,代码块不断给我error: expected constructor, destructor, or type conversion before '(' token。我做错了什么?

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

1 个答案:

答案 0 :(得分:4)

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

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

就您的代码片段而言,您不能将#include放在函数体中:您应该将这些内容分成两部分:

位于文件顶部:

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

在函数体内:

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