Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Charlie BoT en 9 Enero 2017, 23:13 pm



Título: Incrustar Programa y sus instancias en un form.
Publicado por: Charlie BoT en 9 Enero 2017, 23:13 pm
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
  1. Public Class Form1
  2.  
  3. #Region " API "
  4.  
  5.    Declare Auto Function SetParent Lib "user32.dll" (ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As Integer
  6.    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
  7.    Private Const WM_SYSCOMMAND As Integer = 274
  8.    Private Const SC_MAXIMIZE As Integer = 61488
  9.  
  10. #End Region
  11.  
  12.  
  13.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  14.  
  15.    End Sub
  16.  
  17.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  18.        Dim proceso As Process
  19.        proceso = Process.Start("C:\Program Files\AIMP\AIMP.exe")
  20.        proceso.WaitForInputIdle()
  21.        System.Threading.Thread.Sleep(1200)
  22.        SetParent(proceso.MainWindowHandle, Me.Panel1.Handle)
  23.  
  24.        SendMessage(proceso.MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0)
  25.    End Sub
  26. End Class
  27.  


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


Título: Re: Incrustar Programa y sus instancias en un form.
Publicado por: okik en 18 Enero 2017, 20:40 pm
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


Título: Re: Incrustar Programa y sus instancias en un form.
Publicado por: Eleкtro en 18 Enero 2017, 21:40 pm
hacer 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!