tutorial español ejemplos wpf winapi

español - wpf xaml



¿Cómo integrar Windows desde otra aplicación en nuestra ventana de WPF como control del usuario? (1)

Hice eso hace un tiempo para Winforms, pero el método no era brillante, así que mientras alguien más no tenga idea, esto es lo que hice. El código era más o menos esto:

Process p = Process.Start(@"application.exe"); p.WaitForInputIdle(); IntPtr appWin = p.MainWindowHandle; SetParent(appWin, parent); SetWindowLong(appWin, GWL_STYLE, WS_VISIBLE); System.Threading.Thread.Sleep(100); MoveWindow(appWin, 0, 0, ClientRectangle.Width, ClientRectangle.Height, true);

(donde SetParent , SetWindowLong y MoveWindow son las funciones de la API de win32 que se llaman a través de p / invoke) El sueño era necesario como un hack, porque sin él, la llamada a MoveWindow no tendría ningún efecto.

Para WPF, necesitará un controlador para una ventana / control que será el parente de su ventana de terceros y la forma más fácil de obtener dicho controlador es usar un contenedor HwndHost .

No creo que haya una forma más bonita de lograr esto en WPF. Además, tenga en cuenta que solo he probado esto en winforms, no en WPF, pero debería funcionar también en WPF, siempre que tenga un HWND win32 válido del padre.

¿Es posible tener una ventana de otra aplicación de terceros que se muestra dentro de nuestra ventana de WPF? Preferiblemente en un control de contenedor?

Supongo que podría haber alguna API Win32 que nos permita hacer eso.