2009-02-28 27 views
9

**** C alerta de novato **** ¿Cómo compilo una aplicación C para que se ejecute sin mostrar una ventana de consola en Windows? Estoy usando Windows XP y GCC 3.4.5 (mingw-vista special r3). He buscado en Google este exhaustiva y yo he llegado con los siguientes elementos que, de acuerdo con lo que he leído, parece que se supone que debe hacer el truco, pero no lo hace en mi sistema:GCC/C ¿cómo ocultar la ventana de la consola?

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

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

I También he intentado pasar el argumento "-mwindows" a GCC inútilmente. El ejemplo de código inicia el Bloc de notas pero aún parpadea un símbolo del sistema.

EDIT: FWIW También he probado ShellExecute como un alernative al sistema(), aunque me gustaría incluso obtener una aplicación con un main() vacío o WinMain() trabajando en este punto.

Respuesta

14

retener el indicador -mwindows y utilizar esta:

#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); 
} 

Nota: se necesita la ruta completa para la llamada execl() pero no el execlp() uno.

Edit: una breve explicación de por qué esto funciona - using system() inicia un shell (como cmd.exe) para ejecutar el comando que produce una ventana de consola. Usar execl no.

+0

¡Perfecto! Gracias. –

+0

Ah, gracias por la edición también. Supuse que era algo así. (¿Dónde está el botón +2? ;-) –

+0

No debería necesitar la ruta completa si usa execlp(). – paxdiablo

Cuestiones relacionadas