C ++ Как скрыть окно консоли при запуске?

Я хочу знать, как скрыть окно консоли при запуске.

Я хочу быть честным и сказать вам, что это для программы кейлоггер, НО я не собираюсь взломать кого-то. Это для маленького школьного проекта, который я хочу сделать, чтобы показать опасности хакеров. (Я думал, что было бы очень круто показать что-то подобное в школе.)

Я надеюсь, что вы поможете мне с этим.

Так. Вот код, который я написал, посмотрев его в Google. (Не обращайте внимания на все заметки о намерениях.)

#include <cstdlib>
#include <iostream>
#include <Windows.h>

using namespace std;

int main()
{
/* Note. This program is only created to show the risk of being unaware of hackers.
* This program should never be used to actually hack someone.
* Therefore this program will never be avaiable to anyone, except me.
*/

cout << "Note. This program is only created to show the risk of being unaware of hackers." << endl;
cout << "This program should never be used to actually hack someone." << endl;
cout << "Therefore this program will never be avaiable to anyone, except me." << endl;

FreeConsole();

system("PAUSE");
return 0;
}

Как видите, я включил Windows.h и написал FreeConsole (); в основном.

Да, я вижу появившееся окно и сразу исчезаю. Но, похоже, сразу после этого открывается новая консоль, которая просто пуста. (С пустым, я имею в виду: «Нажмите любую клавишу, чтобы продолжить ..» Я думаю о том, имеет ли это какое-либо отношение к «system (« PAUSE »)»)

Поэтому я хочу знать, почему он открывает новую консоль, а не просто создает и скрывает первую.

Благодарю. 🙂

10

Решение

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

#include <Windows.h>

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

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

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

Другие решения

Поэтому я хочу знать, почему он открывает новую консоль, а не просто создает и скрывает первую.

Консольное приложение фактически не создает консоль, оно просто запускается в одной. Если вы запускаете исполняемый файл из Проводника, Windows создает консоль для его запуска. Когда вы вызываете FreeConsole, она не закрывает новую консоль, просто отсоединяет ваш процесс от нее.

Как отмечалось в комментариях к WhozCraig, создайте обычное приложение для Windows и не создавайте окна.

5

Вы пишете консольную программу в качестве точки входа main(), Для графических приложений Windows точка входа должна быть WinMain http://msdn.microsoft.com/en-us/library/windows/desktop/ms633559(v=vs.85).aspx

4

#include <windows.h>
#include <iostream.h>

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"); //here you can call any process silently like system("start chrome.exe") , so google chrome will open and will surprise user..
return EXIT_SUCCESS;
}
3

Скрытие окна консоли при запуске на самом деле невозможно в вашем коде, потому что исполняемый файл запускается операционной системой с конкретными настройками. Вот почему окно консоли отображается очень короткое время при запуске, когда вы используете, например, FreeConsole();
Чтобы действительно скрыть окно при запуске, вы должны добавить в ваш компилятор специальную опцию. Если вы используете gcc в Windows (MinGW), вы можете просто добавить -mwindows в качестве опции компилятора в вашем make-файле и не будет абсолютно никаких окон или «флеш».
Я не знаю ни о VisualStudio, ни о том, что вы используете в данный момент, но изменение способа компиляции кода в вашей среде IDE — это путь, вместо того, чтобы кодировать обходные пути в C ++.

На мой взгляд, такой подход лучше, чем использование WinMain потому что он работает надежно, и вы не делаете свою платформу C ++ Code зависимой.

3

Это просто. FreeConsole () API сделает эту магию для вас

BOOL WINAPI FreeConsole(VOID);
2

Просто сделайте это при запуске

myConsole = GetConsoleWindow();
ShowWindow(myConsole,0);
2
#include <windows.h>
ShowWindow(GetConsoleWindow(), SW_HIDE); //SW_RESTORE to bring back

Это вернет дескриптор окна (HWND) ShowWindow() который, в свою очередь, будет скрывать это. Это решение только для систем Windows.

Это правильный ответ на вопрос, даже если он не помечен как он.

редактировать: возможное решение / взлом может быть установить (в Visual Studio) Linker-> System-> SubSystem на «Windows (/ SUBSYSTEM: WINDOWS)» вместо «Консоль (/ SUBSYSTEM: CONSOLE)». Это, вероятно, не оптимально, однако.

2
По вопросам рекламы [email protected]