Создание "невидимой" программы для Windows на C / C ++ - PullRequest
2 голосов
/ 29 февраля 2012

Хорошо, это продолжение этого вопроса: Как сделать простой Hello World "невидимым" в Windows (C / C ++)

Люди дали мне некоторое руководство, и вот я с новым вопросом:

Через некоторое время после некоторых исследований я снова застрял. Люди в интернете утверждают, что при создании приложения win32 графических указаний не будет.

Вот код, который делает это (я почти уверен, что вы уже знаете это, но с е)

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow) {

//code
return 0;
}

Таким образом, код, введенный внутри main, не отображается. Я не совсем понимаю, какой код они имеют в виду, но например:

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow) {

    while (1) {
    }
}

Эта программа просто открывает окно Cmd.

Я также обнаружил, что путем инициализации значений в структуре STARTUPINFO, как это

STARTUPINFO StartupInfo;
memset(&StartupInfo, 0, sizeof(StartupInfo));
// set the size of the structure
StartupInfo.cb = sizeof(STARTUPINFO);
// tell the application that we are setting the window display 
// information within this structure
StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
// set the window display to HIDE
StartupInfo.wShowWindow = SW_HIDE;

скрыл бы окно консоли. Это не работает для меня, хотя У меня такое чувство, что мне не хватает основной концепции, поэтому мне нужны ваши знания, ребята. Я хочу создать простой .exe с чем-то вроде цикла while или простой печать, которая ничего не отображает. Чего мне не хватает?

1 Ответ

5 голосов
/ 29 февраля 2012

Вы должны использовать конкретную опцию компилятора, чтобы сделать это;это не свойство самого кода.Я предполагаю, что вы используете Visual Studio для компиляции.

Перейдите на Project Properties > Configuration Properties > Linker > System > SubSystem и установите его на Windows.Если вы сделаете это и запустите свою программу и, например, поместите свою программу в бесконечный цикл, вам придется убить ее из диспетчера задач.

Я понятия не имею, как это сделатьна GCC. Джеральд сказал мне в комментариях, что использование --subsystem,windows или -mwindows сделает это для GCC.Обратите внимание, что -mwindows также связывает библиотеки GDI.

...