Независимые от платформы способы скрытия консоли при запуске программы

Я ищу способ скрыть консоль (в 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 ответ

Решение

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

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

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

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

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

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

#ifdef __WIN32__
    ShowWindow(GetConsoleWindow(), SW_HIDE);
#endif
Другие вопросы по тегам