Incrustar Programa y sus instancias en un form.

Iniciado por Charlie BoT, 9 Enero 2017, 23:13 PM

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

Charlie BoT

Saludos, vengo con un problema. quiero incrustar un programa en un formulario y he estado buscando en la web info al respecto y me encontré con un código que lo hace bastante simple, el código funciona, pero mi problema es que como es obio solo incrusta la instancia principal o no todas las sub instancias pertenecientes a el mismo programa.

Acá dejo el código en el form de prueba que tengo....




Código (vbnet) [Seleccionar]

Public Class Form1

#Region " API "

   Declare Auto Function SetParent Lib "user32.dll" (ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As Integer
   Declare Auto Function SendMessage Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
   Private Const WM_SYSCOMMAND As Integer = 274
   Private Const SC_MAXIMIZE As Integer = 61488

#End Region


   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

   End Sub

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim proceso As Process
       proceso = Process.Start("C:\Program Files\AIMP\AIMP.exe")
       proceso.WaitForInputIdle()
       System.Threading.Thread.Sleep(1200)
       SetParent(proceso.MainWindowHandle, Me.Panel1.Handle)

       SendMessage(proceso.MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0)
   End Sub
End Class



Con este código logro incrustar el reproductor de música aimp, pero si abro las opciones del aimp estas se salen del form contenedor....



Bueno, espero haberme explicado bien y espero a sus sugerencias mientras sigo en la búsqueda de información...

okik

#1
hola

Esto es de Visual Basic 6 creo que pero es lo que pides, solo tienes que pasarlo a Visual Basic .NET

http://foro.elhacker.net/programacion_visual_basic/abrir_ejecutable_en_un_form_iquestes_posible_abrir_chrome-t429104.0.html

El usuario de este enlace pide como incrustar Chrome dentro del formulario de su aplicación.


Usa código no administrado por Net Framework, es decir se usa API de Windows.

NOTA:
Puede que alguien sepa como hacer lo mismo con código administrado por .Net Framework y esté esperando a que yo responda para decir la otra forma....  :P. Pues estupendo, me gustaría verla porque no la se.  :-*

chau

Eleкtro

#2
Cita de: okik en 18 Enero 2017, 20:40 PMhacer lo mismo con código administrado

Yo también lo dudo mucho. Microsoft siempre le ha puesto mala cara y a intentado cortar por lo sano el uso de la programación intrusiva y dudósamente ética en .NET. A algo como por ejemplo permitir de forma guiada el interferir con una ventana externa fuera de la unidad de procesos de tu propia aplicación para manipularla y adjuntarla a la ventana principal creo que se podría asumir como algo inseguro dentro de la seguridad que ofrece el código administrado de .NET, no creo que haya modo guiado para hacer eso (me refiero a un equivalente/wrapper de la función SetParent), hay que hechar mano de la WinAPI.

Por otro lado, y aunque esto no tiene que ver demasiado, en .NET podemos encontrar el framework de Microsoft UI Automation (que es un rato intrusivo y dudósamente ético según con qué propósito se utilice) con el que podemos realizar análisis de tipo UI Spy en ventanas ajenas y disparar algunos eventos de forma automatizada (como invocar un botón en otra ventana) pero es por este motivo que su propósito ético y principal es el de poder implementar tests de tipo Coded UI Tests en ensamblados .NET externos.

Saludos!