• 0

[C# or any] Embedding a DOS window?


Question

13 answers to this question

Recommended Posts

  • 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.

  • 0

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 handle");
            else
            {
                SetParent(hwnd, this.Handle);
                MoveWindow(hwnd, 0, 0, this.Width, this.Height, false);
            }
        }
    }

  • 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
  • 0
  AndreasV said:
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.

  • 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.

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.