GCC / C как скрыть окно консоли? - PullRequest
11 голосов
/ 28 февраля 2009

**** C newbie alert **** Как мне скомпилировать приложение C, чтобы оно работало без отображения окна консоли в Windows? Я использую Windows XP и GCC 3.4.5 (mingw-vista special r3). Я исчерпывающе погуглил это и нашел следующее, которое, согласно тому, что я прочитал, звучит так, будто оно должно сработать, но не в моей системе:

#include <windows.h>
#include <stdlib.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    system("start notepad.exe");
}

Я также пытался передать аргумент "-mwindows" в GCC, но безрезультатно. В примере кода запускается Блокнот, но все еще отображается командная строка.

РЕДАКТИРОВАТЬ: FWIW Я также пробовал ShellExecute в качестве предупреждения для system (), хотя я был бы рад даже получить приложение с пустым main () или WinMain (), работающим на этом этапе.

1 Ответ

16 голосов
/ 28 февраля 2009

Сохраните флаг -mwindows и используйте это:

#include <windows.h>
#include <process.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    execl("c:\\winnt\\system32\\notepad.exe", 0);
    // or: execlp("notepad.exe", 0);
}

Примечание: вам нужен полный путь для вызова execl(), но не execlp().

Редактировать: краткое объяснение, почему это работает - использование system () запускает оболочку (например, cmd.exe) для выполнения команды, которая создает окно консоли. Использование execl не делает.

...