2010-10-12 7 views

Répondre

3

Oh! Vous voulez la console dans la fenêtre. Vous pouvez écrire vos propres entrées et pipes dans stdout et stdin. Ou vous pouvez imbriquer PowerShell mais il n'y a pas de contrôle cuit. - rerun Oct 12 '10 à 19:49

+0

Pourquoi cette réponse (la seule qui est actuall une vraie réponse) n'est pas au top? –

8

Tout ce que vous devez faire est d'appeler la fonction Windows API AllocConsloe puis utilisez la classe de la console normale est ici la forme de code

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 

namespace waTest 
{ 
    public partial class Form1 : Form 
    { 
     [DllImport("Kernel32.dll")] 
     static extern Boolean AllocConsole(); 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      if (!AllocConsole()) 
       MessageBox.Show("Failed"); 
      Console.WriteLine("test"); 
      string input = Console.ReadLine(); 
      MessageBox.Show(input); 
     } 
    } 
} 
+0

@rerun, quelle est l'affaire, il ne peut pas trouver Kernal32.dll? C'est un système x86. –

+0

@rerun, doit être que je l'ai mis comme une application de la console, pas une application winforms. Je suppose que Form1_Load est supposé s'exécuter lorsque le formulaire se charge, est-ce correct? Comment puis-je le faire fonctionner? –

+0

Il suffit de créer une application winforms avec 1 formulaire et double-cliquez sur le formulaire et il vous créera un formulaire_load que vous pouvez cependant appeler allocconsle n'importe où car une seule console peut être associée à un processus. – rerun

2

Vous pouvez le faire essentiellement par:

  1. Création du cmd processus
  2. Réglage du parent de ce processus à la forme (ou un panneau par exemple)
  3. Branchez les événements redimensionne en cas de besoin
  4. Supprime le processus lorsque le processus principal n'a plus besoin du processus cmd.

Vous devez appeler l'API directement pour cela (vous avez besoin de SetParent et SetWindowPos). Voici un article sur la façon de le faire avec des exemples:

http://www.geekpedia.com/tutorial230_Capturing-Applications-in-a-Form-with-API-Calls.html

Questions connexes