2008-10-22 9 views
22

Comment pourriez-vous programmer une application C/C++ qui pourrait fonctionner sans ouvrir une fenêtre ou une console?Créer une application sans fenêtre

+1

fil connexes: http://stackoverflow.com/questions/13051412/how-to-hide-the-console-window-in-a-win32-project-using-visual-studio-2010 – BuvinJ

Répondre

34

Lorsque vous écrivez un programme WinMain, vous obtenez automatiquement l'option/Sous-système à Windows dans le compilateur. (En supposant que vous utilisez Visual Studio). Pour tout autre compilateur, une option similaire peut être présente mais le nom du flag peut être différent.

Cela provoque le compilateur pour créer une entrée dans le format de fichier exécutable (PE format) qui marque l'exécutable en tant qu'exécutable Windows. Une fois que cette information est présente dans l'exécutable, le chargeur système qui démarre le programme traitera votre binaire comme un exécutable Windows et non comme un programme console, et par conséquent, il ne provoquera pas l'ouverture automatique des fenêtres de console lors de son exécution. Mais un programme Windows n'a besoin de créer aucune fenêtre s'il ne le souhaite pas, comme tous les programmes et services que vous voyez dans la barre des tâches, mais qui ne voient aucune fenêtre correspondante pour eux. Cela peut également se produire si vous créez une fenêtre, mais choisissez de ne pas l'afficher.

Tout ce que vous devez faire, pour réaliser tout cela est,

#include <Windows.h> 

int WinMain(HINSTANCE hInstance, 
      HINSTANCE hPrevInstance, 
      LPTSTR lpCmdLine, 
      int  cmdShow) 
    { 
    /* do your stuff here. If you return from this function the program ends */ 
    } 

La raison pour laquelle vous avez besoin d'un WinMain lui-même est qu'une fois que vous marquez le sous-système que Windows, l'éditeur de liens suppose que votre fonction de point d'entrée (qui est appelée après le chargement du programme et l'initialisation de la bibliothèque C Run TIme) sera WinMain et non principale. Si vous ne fournissez pas WinMain dans un tel programme, vous obtiendrez une erreur de symbole non résolue pendant le processus de liaison.

+0

J'ai une exigence similaire où j'utilise une minuterie. Je veux que le programme fonctionne sans s'arrêter. Dans ce programme, une minuterie a été réglée. alors comment puis-je le faire. ? –

+0

ne devrait pas être int WINAPI WinMain (...)? – uceumern

11

Dans les fenêtres:

#include <windows.h> 

int APIENTRY WinMain(HINSTANCE hInstance, 
        HINSTANCE hPrevInstance, 
        LPTSTR lpCmdLine, 
        int  nCmdShow) 
{ 
    // <-- Program logic here 
    return 0; 
} 

Assurez-vous d'utiliser le commutateur de liaison/SUBSYSTEM comme mentionné par Adam Mitz.

Sur les autres plateformes:

int main(int argc, char**argv) 
{ 
    // <-- Program logic here 
    return 0; 
} 
+0

Deux plaintes: WinMain est inutile si vous n'incluez pas windows.h; et retourne 0; est optionnel en main. – coppro

+2

Vous voulez retourner 0 afin que vous puissiez signifier le succès des programmes qui l'appellent. –

+0

Si vous créez une application de console et que vous avez int Main pour Windows, vous aurez une fenêtre de console lorsque vous double-cliquez sur l'exe. –

-7

Si vous utilisez MSVC ou Visual Studio il suffit d'utiliser le nouvel Assistant de projet et sélectionnez l'application Console .

+0

application de la console ouvrira toujours une fenêtre de la console quand il fonctionne – computinglife

+1

Etes-vous sûr de savoir de quoi vous parlez? http://fr.wikipedia.org/wiki/Win32_console Je ne pense pas !!! La dernière fois que j'ai regardé une application de console était une application non gui win32 !!! – jussij

+1

jussij - Correct. c'est une application CLUI. et afin d'interagir avec cette CLUI, Windows crée une interface graphique CL pour vous. – Aaron

3

Si vous avez besoin de lancer votre programme de manière contiguë sans avoir de console ou de fenêtre, vous pourriez trouver utile deamon on *NIX ou services on Windows, cet exemple .NET si vous avez besoin de win32, google google un peu pour l'échantillon.
Depuis votre question marquée comme win32 je suppose que les services sont plus pertinents pour vous.

0

Utilisez l'Assistant Visual Studio pour créer l'application Win32. Mais ne créez pas la fenêtre, c'est-à-dire que vous supprimez la fonction de création de fenêtre. Alternativement, nous pouvons créer une application Win Service.

2

Dans Visual Studio Express 2010 après avoir défini le sous-système sur Windows (comme suggéré par user17224), ou en modifiant le principal à WinMain (comme suggéré par user17224 et Brian R. Bondy), on peut définir la fonction d'entrée dans propriétés, éditeur de liens, avancé, point d'entrée: tapez simplement main dans la zone de texte.

Questions connexes