Search code examples
c++consolecross-platformplatform-independent

Platform independant ways of hiding console when program runs


Im looking for a way to hide the console (in windows) in my program, and ive found this code:

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

however, codeblocks keeps on giving me error: expected constructor, destructor, or type conversion before '(' token. what am i doing wrong?

what are codes of hide the console in mac and linux? I dont use mac or linux too often, but i want to make my programs platform independent. is there a code that works in all platforms? does the console even show up in mac and linux when compiling?


Solution

  • In general, console applications shouldn't mess with their window. If you need more advanced stuff (show/hide your window, decide its size, ...) you should probably switch to a GUI application. This holds true even if you just don't want any window: create a GUI application and don't create windows.

    On Mac and Linux no console is shown by default when you start an executable (and there's no distinction between GUI and console executables); if you start it in a terminal, the application don't have much control over it (unless it uses escape codes, but they are to control text formatting/positioning). You can use some heuristic to guess the terminal emulator used and tell it to hide, but it's ugly, cumbersome and, again, defeats the purpose of a console application.

    As far as your code snippet is concerned, you can't put that #include inside a function body: you should split that stuff in two pieces:

    At the top of the file:

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

    inside the function body:

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