2009-02-28 4 views
9

**** C avviso newbie **** Come si compila un'applicazione C in modo che venga eseguita senza mostrare una finestra della console su Windows? Sto usando Windows XP e GCC 3.4.5 (mingw-vista speciale r3). Googled questo modo esauriente e mi è venuta in mente la seguente, che, in base a ciò che ho letto, sembra che si suppone di fare il trucco, ma non lo fa sul mio sistema:GCC/C come nascondere la finestra della console?

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

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

I Ho anche provato a passare l'argomento "-mwindows" a GCC inutilmente. L'esempio di codice avvia Blocco note, ma continua a lampeggiare su un prompt dei comandi.

EDIT: FWIW Ho anche provato ShellExecute come un alernative a system(), anche se sarei felice di ottenere anche un'app con un main() o WinMain() vuoto che funziona a questo punto.

risposta

14

conservare la bandiera -mwindows e utilizzare questo:

#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: è necessario il percorso completo per la chiamata execl() ma non il execlp() uno.

Modifica: una breve spiegazione del motivo per cui funziona: l'utilizzo di system() avvia una shell (come cmd.exe) per eseguire il comando che produce una finestra della console. Usare execl no.

+0

Perfetto! Grazie. –

+0

Ah, grazie anche per la modifica, ho pensato che fosse qualcosa del genere. (Dov'è il pulsante +2? ;-) –

+0

Non è necessario il percorso completo se si utilizza execlp(). – paxdiablo