Win32 программирование скрывает консольное окно

Я изучаю С++, и я создал новую программу, и я удалил часть кода, и теперь мое консольное окно не скроет, есть ли способ заставить его скрыться при запуске без их просмотра.

Ответы

Ответ 1

Если вы пишете консольную программу и хотите отключить свою программу с консоли, с которой она начиналась, вызовите FreeConsole, В конечном счете, вы, вероятно, не будете удовлетворены тем, что действительно выполняет эта функция, но это буквальный ответ на заданный вами вопрос.

Если вы пишете программу, в которой вы никогда не хотите иметь консоль, в первую очередь, настройте свой проект так, чтобы он не был консольной программой. "Consoleness" - это свойство EXE файла. ОС читает эту настройку и решает, следует ли выделять консоль для своей программы до того, как какой-либо из ваших кодов когда-либо будет запущен, поэтому вы не сможете контролировать ее в программе. Иногда неконсольная программа называется "программой GUI", поэтому вы можете искать выбор между "консолью" и "графическим интерфейсом" в настройках вашей среды разработки. Однако при настройке на GUI не требуется, чтобы у вас был какой-либо пользовательский интерфейс. Параметр просто контролирует, запускается ли ваша программа с консоли.

Если вы пытаетесь написать программу, которая иногда может иметь консоль, а иногда и нет, обратитесь к более раннему вопросу, Может ли один исполняемый файл быть консольным и графическим приложением?

Ответ 2

Предполагая, что вы находитесь в Windows, настройте свой компоновщик, чтобы сделать GUI-программу, а не консольную программу.

  • VS: Посмотрите в Linker ptions на свойства проекта
  • LINK: add/SUBSYSTEM: WINDOWS
  • MinGW: -mwindows

Ответ 3

#include <windows.h>
#include <iostream>
using namespace std;
void Stealth()
{
 HWND Stealth;
 AllocConsole();
 Stealth = FindWindowA("ConsoleWindowClass", NULL);
 ShowWindow(Stealth,0);
}

int main()
{
  cout<<"this sentence is visible\n";
  Stealth(); //to hide console window
  cout<<"this sentence is not visible\n";
  system("PAUSE");
  return EXIT_SUCCESS;
}

Ответ 4

В таком случае я использовал ShowWindow (GetConsoleWindow(), SW_HIDE);, но если вам не нужна консоль, не создавайте проект консольного приложения.

Ответ 5

Как уже говорилось, запуск приложения с консолью или нет установлен в exe. Используя компилятор gnu, опция -mwindows не имеет консоли, например

g++ -mwindows winapp.c

кажется, что метод

#define _WIN32_WINNT 0x0500
#include <wincon.h> 
....
   case WM_CREATE : 
      ShowWindow (GetConsoleWindow(), SW_HIDE);

закрыть все родительские консоли, поэтому, если вы запустите winapp.exe из консоль командной строки тоже будет закрыта!

Ответ 6

Вы можете создать сводку окна. Или нарисуйте его за пределами видимого экрана.

Но вы также могли бы испортить флаги создания окна. Если ты действительно испортил ситуацию. Лучше начать новое окно. (Или восстановить из предыдущей версии или резервной копии).

Ответ 7

Чтобы буквально скрыть/показать окно консоли по требованию, вы можете использовать следующие функции: Скрыть/показать консоль можно с помощью ShowWindow. GetConsoleWindow извлекает дескриптор окна, используемый консолью. IsWindowVisible можно использовать для проверки, видно ли окно (в этом случае консоль) или нет.

#include <Windows.h>

void HideConsole()
{
    ::ShowWindow(::GetConsoleWindow(), SW_HIDE);
}

void ShowConsole()
{
    ::ShowWindow(::GetConsoleWindow(), SW_SHOW);
}

bool IsConsoleVisible()
{
    return (::IsWindowVisible(::GetConsoleWindow()) != FALSE);
}