A friend of mine wanted to embed a third party application within her WPF application. While at first I was slightly confused, a bit of googling made life easy.
Center idea revolve around launching the third party application using the
Process class and use the Win32 API methods to embed it within the client application.
var process = Process.Start("Notepad.exe"); process.WaitForInputIdle();
The above code needs to be executed after the view has been completely loaded. In the above steps the application (for the sake of example, we will use Notepad.exe ) and use the
WaitForInputIdle() method to wait untill the associated process is in idle state.
The next step involve changing the parent Window of new Notepad process to the current application’s Window Handle.
var win = view as Window; var winHandle = new WindowInteropHelper(win).Handle; SetParent(process.MainWindowHandle, winHandle); SetWindowLong(process.MainWindowHandle, GWL_STYLE, WS_VISIBLE); MoveWindow(process.MainWindowHandle, 0, 0, (int)win.ActualWidth, (int)win.ActualHeight, true);
This would be followed by setting the visibility of the Window Style, and then, the most important step – changing the position of the newly invoked process to the desired location in the parent WPF application.
That’s all you would need to embed the application within the WPF application. I have wrote a small application, implementing the idea, which can be accessed from my Github here.