是否可以在我们的WPF窗口中显示另一个第三方应用程序的窗口?最好是在容器控件中?
我猜可能有一些Win32 API允许我们这样做.
我前段时间为Winforms做过,但方法并不明亮,所以只要其他人都不知道,这就是我的所作所为.代码几乎是这样的:
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);
Run Code Online (Sandbox Code Playgroud)
(其中SetParent,SetWindowLong和MoveWindow是通过p/invoke调用的win32 API函数)需要睡眠作为hack,因为没有它,对MoveWindow的调用将不起作用.
对于WPF,您将需要一个窗口/控件的句柄,它将成为您的第三方窗口的一部分,获得此类句柄的最简单方法是使用HwndHost容器.
我不认为在WPF中有更好的方法来实现这一点.另外,请注意我只在winforms中测试过,而不是在WPF中测试,但它也应该在WPF中测试,只要它具有父级的有效win32 HWND.