2010-10-12 10 views

Odpowiedz

3

Oh! Chcesz konsoli w oknie. Możesz napisać własne i potokowe wejście do i ze stdout i stdin. Lub możesz osadzić powershell, ale nie ma kontroli nad pieczeniem. - rerun Paź 12 '10 o 19:49

+0

Dlaczego ta odpowiedź (jedyna, która jest prawdziwa odpowiedzią) nie jest na górze? –

8

Wszystko, co musisz zrobić, to wywołać funkcję Windows API AllocConsloe następnie korzystania z normalną klasę konsoli Oto kodu formularza

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, co to jest, nie można znaleźć Kernal32.dll? To jest system x86. –

+0

@rerun, musi być tak, że ustawiłem to jako aplikację konsolową, a nie jako aplikację WinForm. Zakładam, że Form1_Load ma być uruchamiany po załadowaniu formularza, czy to prawda? Jak uruchomić? –

+0

Po prostu utwórz aplikację WinForm z 1 formularzem i kliknij dwukrotnie na formularzu, a utworzysz formularz form_load, możesz jednak wywoływać alokację wszędzie, ponieważ tylko jedna konsola może być powiązana z procesem. – rerun

2

Można to zrobić w zasadzie przez:

  1. Tworzenie cmd proces
  2. Ustawienie elementu nadrzędnego dla tego procesu (na przykład dla panelu)
  3. Podłącz zdarzenia, aby zmienić rozmiar w razie potrzeby
  4. Zabij proces, gdy proces główny nie potrzebuje już procesu cmd.

Musisz zadzwonić bezpośrednio do API (potrzebujesz SetParent i SetWindowPos). Oto artykuł o tym, jak to zrobić z przykładów:

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