• Sign in to Neowin Faster!

    Create an account on Neowin to contribute and support the site.

  • 0
Sign in to follow this  

[C# or any] Embedding a DOS window?

Question

zachman123    0

I've been wondering this for a while now, is it possible to somehow display a DOS command window inside a form?

Share this post


Link to post
Share on other sites

13 answers to this question

Recommended Posts

  • 0
AndreasV    0

A DOS command window or a console window? two different things.

If you want the console window, you could pipe the input and output with an internal buffer which you show in a funky editbox?

Share this post


Link to post
Share on other sites
  • 0
zachman123    0
I've been wondering this for a while now, is it possible to somehow display a DOS command window inside a form?

585882760[/snapback]

Thanks for the console tip though too.

Share this post


Link to post
Share on other sites
  • 0
AndreasV    0

DOS command is not gonna work, because that runs in the 16 bit emulation layer (WoW).

Share this post


Link to post
Share on other sites
  • 0
zachman123    0

O.k., I think I see. Even on Windows XP though? Doesn't XP use pseudo-dos, not actually emulate dos?

Share this post


Link to post
Share on other sites
  • 0
AndreasV    0

No. There are 16 bit DOS windows, which run in the emulation layer en there are console windows (start->run type cmd and hit enter to see one). Console windows are actually 32 bits applications which simply don't have a GUI output, but use the good old commandline/console interface.

Share this post


Link to post
Share on other sites
  • 0
zachman123    0

I see. Thanks anyways though for the info.

Share this post


Link to post
Share on other sites
  • 0
dannysmurf    4

You can embed an existing command line window inside one of your windows using a bit of trickery with the FindWindow, SetParent and MoveWindow Win32 API functions.

This is C# 2005 code, but it should work equally well in 2002 or 2003. The only thing you need to watch is that you have the EXACT text of the command window in the call to FindWindow. Using this code as a template, it wouldn't be terribly difficult to start up a command window from your app and then hijack that instead of a command window started from the shell.

    public partial class Form1 : Form
    {
        [DllImport("user32.dll")]
        private static extern IntPtr FindWindow(String className, String WindowName);

        [DllImport("user32.dll")]
        private static extern IntPtr SetParent(IntPtr childWindow, IntPtr newParent);

        [DllImport("user32.dll")]
        private static extern bool MoveWindow(IntPtr hwnd, int x, int y, int width, int height, bool repaint);

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            IntPtr hwnd = FindWindow(null, "C:\\WINDOWS\\system32\\cmd.exe");
            if (hwnd == IntPtr.Zero)
                MessageBox.Show("Got null handle");
            else
            {
                SetParent(hwnd, this.Handle);
                MoveWindow(hwnd, 0, 0, this.Width, this.Height, false);
            }
        }
    }

Share this post


Link to post
Share on other sites
  • 0
AndreasV    0

C:\\WINDOWS\\system32\\cmd.exe <- that's not A DOS window, but a console window (32bits).

Share this post


Link to post
Share on other sites
  • 0
zachman123    0

Well that's actually what I was going for. Now for an even less likely question....

Would it be possible to recieve the text in the cmd.exe window using a message or something?

edit: Never mind, this http://www.codeguru.com/Csharp/Csharp/cs_m...icle.php/c8503/ appears to be almost what I need.

Edited by zachman123

Share this post


Link to post
Share on other sites
  • 0
AndreasV    0

So you didn't want a DOS command window at all? Talk about misleading me :p .. A console window is gonna work yes.. Just pipe it's input/output.

Share this post


Link to post
Share on other sites
  • 0
Patrick_    0

You could also just open up a command prompt in the background and output its output to your program. :D I know the VB.NET code if you would like it.

Share this post


Link to post
Share on other sites
  • 0
dannysmurf    4
C:\\WINDOWS\\system32\\cmd.exe <- that's not A DOS window, but a console window (32bits).

585886875[/snapback]

Right, but what he wanted was a command prompt (not, say a DOS game or something). Whether it's a DOS command prompt or a Windows command prompt really isn't THAT important, since you could use the same technique to embed either.

Share this post


Link to post
Share on other sites
  • 0
zachman123    0

I thought by console window you meant the programs console window :D

Anyways, I've got it all worked out.

BTW if you're wondering what this is for... 1. I want to be able to have a nice, good looking DOS/Command/Console (heh) window on my desktop. And 2. Just got a 4x20 lcd and I want to use it to show DOS/Command/Console output on it (I know 20 charactors isn't that big, but meh, it's just for fun).

Thanks to all that helped.

edit: On second thought, I'm interested to see what you've got, Patrick_. Feel free to email/im (aim:zachman123,email/msn:zachman123@gmail.com,yahoo:zachdude123@sbcglobal.net. God I need a sig...) or I'll contact you.

Share this post


Link to post
Share on other sites
This topic is now closed to further replies.
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.