I would like to have a console window embedded in a Winform. Is there any way to do this?
3 Answers
All you need to do is call the windows API function AllocConsloe then use the normal console class here is the form 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); } } } 7 Comments
Oh! You want the console in the window. You can write your own and pipe input to and from stdout and stdin. Or you can imbed powershell but there is no baked in control. – rerun Oct 12 '10 at 19:49
1 Comment
You can do this basically by:
- Creating the cmd process
- Setting the parent of that process to be the form (or some panel for example)
- Plug in the events to resize when needed
- Kill the process when the main process doesn't need the cmd process anymore.
You need to call the API directly for this (you need SetParent and SetWindowPos). Here is an article on how to do it with examples:
http://www.geekpedia.com/tutorial230_Capturing-Applications-in-a-Form-with-API-Calls.html