55 votes

Différence entre l'application Windows et la console

Quelles sont les différences entre les applications Windows et console?

Lors de la création d'un nouveau projet dans Visual C ++, il demande de choisir l'une des options ci-dessus.

85voto

Konrad Rudolph Points 231505

La seule différence est qu'une application de console toujours engendre une console si elle n'est pas lancée à partir d'un (ou de la console est activement supprimés au démarrage). Une application windows, d'autre part, ne pas pondre une console. Il peut encore joindre à un existant de la console ou en créer un nouveau à l'aide de AllocConsole.

Cela rend les applications Windows mieux adapté pour l'interface graphique des applications ou des applications en arrière-plan, car vous ne voulez pas avoir une fenêtre de terminal créé pour ceux-ci.

Sur une note plus technique, la seule différence entre une Console et un exécutable Windows est un octet de l'en-tête PE de l' exe le fichier. Le basculement de cet octet manuellement (par exemple à l'aide d'un éditeur hexadécimal) convertit le type d'application. C'est un bien-publié hack qui est utilisé pour créer des applications de console en VB6 (où ce type de demande n'a pas été explicitement pris en charge).

Afin de déterminer et de modifier le sous-système, type de demande, vous avez besoin de lire des parties de l'en-tête PE. L'adresse de la sous-système de données n'est pas résolu si, parce que ça fait partie de l'option en-tête de fichier, dont la position est déterminée par une adresse stockée dans le DOS en-tête de fichier (dans le membre e_lfanew). Cette adresse en réalité à l' _IMAGE_NT_HEADERS record qui, à son tour, comprend l' IMAGE_OPTIONAL_HEADER32 de la structure. Cela a un int161) membre appelés Subsystem. La valeur est de 2 pour une application Windows et de 3 pour l'application console. D'autres systèmes existent (en particulier, la norme POSIX et noyau). J'ai écrit une petite application VB6 pour modifier le sous-système d'une application, qui peut être téléchargé à partir de ActiveVB sous forme de code source.

Le format PE n'est pas très bien documenté, mais ce document peut servir comme une introduction: le Peering à l'Intérieur de la PE: Visite de la Win32 Portable Executable Format de Fichier.


1) Ce n'est pas vraiment en contradiction avec mon affirmation qu'un seul octet est différent: l'octet le plus significatif de ce membre est toujours 0. Seul l'octet le moins significatif des changements.

20voto

oefe Points 9122

En plus de la différence mentionnée par Konrad, console de Windows et des applications se comportent différemment lorsqu'il est appelé de manière interactive à partir de l'invite de commande:

Lorsque vous démarrez une application console, l'invite de commande ne retourne pas jusqu'à ce que l'application de la console de sortie. Lorsque vous démarrez une application windows, la commande retourne immédiatement.

Ce n'est pas vrai pour les fichiers de commandes; ils seront toujours attendre jusqu'à ce que l'application se ferme. (Vous pouvez toujours utiliser l' start de commande pour démarrer une application sans attendre.)

4voto

Evengard Points 174

Vous pouvez modifier le sous-système avec EDITBIN.exe ( entrée MSDN sur EDITBIN.exe )

4voto

Gregory A Beamer Points 10975

La différence est dans la façon dont les applications sont écrasé. Lorsque vous utilisez la console de modèle, vous disposez d'un stub qui va ouvrir dans une console. Si vous êtes déjà en cours d'exécution dans une console, il ignore l'appel de tourner un.

Par la même occasion, une application windows est conçu avec un formulaire par défaut. Si vous souhaitez la désactiver, vous pouvez créer une ébauche de Windows Forms application qui est essentiellement une application de console sans une fenêtre de console.

Aussi loin que les entrailles de l'app va, ils sont essentiellement les mêmes. La différence majeure est ajouté à la compilation de la scène.

1voto

Ólafur Waage Points 40104

L'application console s'exécute à partir d'une ligne de commande Windows (démarrer / exécuter / cmd)

Une application Windows est prédéfinie afin que vous puissiez programmer une application GUI qui s'exécute dans l'environnement Windows.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X