Afficher la Console en Application de Windows?
Est-il possible d'afficher la console dans une application Windows?
Je veux faire quelque chose comme ceci:
static class Program
{
[STAThread]
static void Main(string[] args) {
bool consoleMode = Boolean.Parse(args[0]);
if (consoleMode) {
Console.WriteLine("consolemode started");
//...
} else {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
Vous devez vous connecter pour publier un commentaire.
Ce que vous voulez faire n'est pas possible dans un façon saine. Il y a une question similaire alors regardez les réponses.
Puis il y a aussi un fou approche (site sauvegarde disponible ici.) écrit par Jeffrey Chevalier:
AttachConsole
avec-1
(la valeur de l'API constanteATTACH_PARENT_PROCESS
) plutôt que d'espérer la fenêtre de premier plan est le droit de la fenêtre de commande pour écrire.console.writeline
est toujours détourné par l'ide, l'entrée semble venir de la nouvelle fenêtre, mais la production ne semble pas y aller.C'est un peu vieux (OK, c'est TRÈS vieux), mais je suis en train de faire exactement la même chose maintenant. Voici une solution très simple qui fonctionne pour moi:
Console.WriteLine
les journaux ne sont pas visible dans le cas a commencé à partir de cmd avec argsusing System.Runtime.InteropServices;
Façon la plus simple est de démarrer une application WinForms, allez à paramètres et de modifier le type d'une application console.
Avertissement
Il y a une façon d'atteindre ce qui est assez simple, mais je ne dirais pas qu'il est une bonne approche pour une application que vous allez laisser d'autres personnes à voir. Mais si vous aviez quelques développeur a besoin pour afficher la console et windows forms dans le même temps, il peut être fait assez facilement.
Cette méthode prend également en charge ne montrant que la fenêtre de la Console, mais ne prend pas en charge l'affichage uniquement pour Windows-Forme - à savoir la Console sera toujours affichée. Vous ne pouvez interagir (c'est à dire de recevoir des données -
Console.ReadLine()
,Console.Read()
) avec la fenêtre de la console si vous ne montrez pas les windows forms; la sortie de la ConsoleConsole.WriteLine()
- fonctionne dans les deux modes.C'est fourni en l'état, absence de garanties ce ne sera pas faire quelque chose d'horrible, mais il ne fonctionne pas.
Les étapes du projet
Démarrer à partir d'un standard Application Console.
Marque la
Main
méthode[STAThread]
Ajouter une référence dans votre projet pour Système.De Windows.Les formes
Ajouter un Windows Forme à votre projet.
Ajouter le standard Windows de code de début de votre
Main
méthode:Résultat Final
Vous disposez d'une application qui affiche la Console et éventuellement windows forms.
Exemple De Code
Programme.cs
Form1.cs
Ressusciter un très vieux thread encore une fois, étant donné qu'aucune des réponses ici très bien fonctionné pour moi.
J'ai trouvé un moyen simple qui semble assez robuste et simple. Il a travaillé pour moi. L'idée:
Exemple:
Un mot de prudence : il semble que si vous essayez d'écrire sur la console avant de fixer ou de allocing une console, cette approche ne fonctionne pas. Ma conjecture est la première fois que vous appelez de la Console.Écrire/WriteLine, si il n'y a pas déjà une console Windows crée automatiquement une console masqué quelque part pour vous. (Donc peut-être d'Anthony ShowConsoleWindow réponse est mieux après que vous avez déjà écrit à la console, et ma réponse est mieux si vous n'avez pas encore écrit de la console). La chose importante à noter est que cela ne fonctionne pas:
\bin\Debug>shareCheck.exe /once
et appuyez sur Entrée à l'invite de commande est affiché, puis de la console commence à la sortie:\bin\Debug>hello. It looks like you started me from an existing console.
et lorsque le programme se termine il n'y a pas d'invite de commande alors la dernière ligne de sortie et le vide de l'écran qui est un peu fouCe qui a fonctionné pour moi a été d'écrire une application console séparément, fait ce que je voulais faire, compiler un fichier exe, et puis ne
Process.Start("MyConsoleapp.exe","Arguments")
Vérifier cette source code. Tous les code commenté – utilisé pour créer une console dans une application Windows. Sans commentaire – pour masquer la console dans une application console. De ici. (Précédemment
ici.) Projetreg2run
.Fait AllocConsole avec SetStdHandle dans une application graphique pourrait être une approche plus sûre. Le problème avec la console, le détournement de" déjà mentionné, est que la console ne soit pas une fenêtre de premier plan à tous, (esp. compte tenu de l'afflux de nouveaux gestionnaires de fenêtre dans Windows Vista/Windows 7), parmi d'autres choses.
Dans wind32, en mode console applications sont complètement bête différente de l'habituel message à la file d'attente de réception des demandes. Ils sont déclarées et compiler différemment. Vous pouvez créer une application qui possède à la fois une partie de la console et fenêtre normale et se cacher l'un ou l'autre. Mais le suspect, vous trouverez le tout un peu plus de travail que vous avez pensé.
Comme par Jeffrey Chevalier de la citation ci-dessus, dès que j'ai exécuter dans des situations où j'ai besoin des appels API pour obtenir quelque chose, j'ai tendance à arrêter et me demander "suis-je de compliquer à l'excès les choses?".
Si ce qui est voulu est d'avoir un peu de code et l'exécuter dans Windows en mode graphique ou en mode Console, envisager de déplacer le code utilisé dans les deux modes d'un code de bibliothèque DLL, et puis d'avoir une application Windows Forms qui utilise cette DLL, et une application Console qui utilise cette DLL (c'est à dire si dans Visual Studio, vous avez maintenant un trois-solution de projet: de la bibliothèque avec l'essentiel du code, l'interface graphique avec juste la Victoire Formes de code, et la Console avec votre console de code.)