Win32 программирование, скрывающее окно консоли - PullRequest
16 голосов
/ 08 марта 2009

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

Ответы [ 7 ]

27 голосов
/ 08 марта 2009

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

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

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

9 голосов
/ 08 марта 2009

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

  • VS: посмотрите в ссылках на свойства проекта
  • ССЫЛКА: добавить / ПОДСТРОЙКА: ОКНА
  • MinGW: -mwindows
7 голосов
/ 16 февраля 2015
#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;
}
5 голосов
/ 08 сентября 2013

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

4 голосов
/ 28 декабря 2013

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

g++ -mwindows winapp.c

похоже, что метод

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

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

1 голос
/ 04 ноября 2016

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

#include <Windows.h>

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

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

bool IsConsoleVisible()
{
    return (::IsWindowVisible(::GetConsoleWindow()) != FALSE);
}
1 голос
/ 08 марта 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...