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....
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...
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 (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
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!