[VB.NET]Como puedo conseguir abrir una ventana de MS-DOS dentro de Formulario

Iniciado por 777Rubenix777, 19 Junio 2010, 17:57 PM

0 Miembros y 1 Visitante están viendo este tema.

777Rubenix777

Hola.. estoy creando un proyecto y necesito saber si se puede abrir dentro de un formulario una ventana de MS-DOS como si fuera MDI.
Bueno muchas gracias!! Un abrazo!!

raul338

Puedes intentar con la API SetWindowParent :P aunque no se si lo deja como MDI

[D4N93R]

Raul xD haha justo estaba posteando y me salio que se ha escrito un mensaje mientras escribía xD LOL

Bueno ahí te va xD


Código (csharp) [Seleccionar]
public partial class Form1 : Form
{
   [DllImport("User32", CharSet = CharSet.Auto, ExactSpelling = true)]
   internal static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndParent);

       
   [DllImport("user32.dll")]
   private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

   Process m_process;
   public Form1()
   {
       InitializeComponent();
       ProcessStartInfo procesInfo = new ProcessStartInfo("calc.exe");
       m_process = Process.Start(procesInfo);
   }
   protected override void OnShown(EventArgs e)
   {
       IntPtr calcHandle = FindWindow("CalcFrame", null);
       SetParent(calcHandle, this.Handle);
   }
   protected override void OnClosing(CancelEventArgs e)
   {
       m_process.Kill();
   }

}


EDIT: Para dejarlo como MDI crea un MDI normal, y luego en SetParent pasas el handle de la ventana child del MDI..

Saludos

777Rubenix777

#3
>>Muxas gracias voy ha probar y os digo!!!
Pueden decirme como coloco el codigo.. jeje y que debo hacer??
.. :S

[D4N93R]

En esta linea, colocas el nombre del proceso que quieres usar, en este caso es calc.exe, pero puede ser cualquiera.
ProcessStartInfo procesInfo = new ProcessStartInfo("calc.exe");


Y en este, colocas el nombre de la clase de la ventana, esto lo puedes encontrar usando Spy++. Sobre el uso de Spy++ hay mucho en internet (busca en google, ask, bing,etc)
IntPtr calcHandle = FindWindow("CalcFrame", null);

Y listo, con eso te debería funcionar.