8

I would like to have a console window embedded in a Winform. Is there any way to do this?

3 Answers 3

8

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); } } } 
Sign up to request clarification or add additional context in comments.

7 Comments

@rerun, what is the deal, it can't find Kernal32.dll? This is an x86 system.
@rerun, must be that I had set this as a console app, not a winforms app. I assume Form1_Load is supposed to run when the form loads, is this correct? How do I get it to run?.
Just create a winforms app with 1 form and double click on the form and it will create you a form_load you can however call allocconsle anywhere since only one console can be associated with a process.
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.
"I would like to have a console window EMBEDDED in a Winform" - pretty clear.
|
3

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

Why is this answer (the only one which actuall is a real answer) not at the top?
2

You can do this basically by:

  1. Creating the cmd process
  2. Setting the parent of that process to be the form (or some panel for example)
  3. Plug in the events to resize when needed
  4. 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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.