Независимые от платформы способы скрытия консоли при запуске программы - PullRequest
1 голос
/ 18 июля 2011

Я ищу способ скрыть консоль (в windows) в моей программе, и я нашел этот код:

#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 Ответ

4 голосов
/ 18 июля 2011

В общем случае консольные приложения не должны связываться с их окном.Если вам нужны более сложные вещи (показать / скрыть окно, определить его размер, ...), вам, вероятно, следует переключиться на приложение с графическим интерфейсом.Это справедливо даже в том случае, если вы просто не хотите никакого окна: создайте приложение с графическим интерфейсом и не создавайте окна.

В Mac и Linux консоль по умолчанию не отображается при запуске исполняемого файла (и нетразличие между GUI и консольными исполняемыми файлами);если вы запускаете его в терминале, приложение не имеет большого контроля над ним (если оно не использует escape-коды, но они должны управлять форматированием / позиционированием текста).Вы можете использовать некоторую эвристику, чтобы угадать используемый эмулятор терминала и сказать ему, чтобы он скрывался, но это уродливо, громоздко и, опять-таки, отрицательно сказывается на назначении консольного приложения.

Что касается вашего фрагмента кода, вынельзя поместить это #include в тело функции: вы должны разбить этот материал на две части:

В верхней части файла:

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

внутри тела функции:

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