WPF在WPF窗口中打开exe程序

时间:2010-04-09 21:06:56

标签: c# wpf windows

不确定这是否可行,但有没有办法在WPF窗口的容器内打开另一个程序,如记事本?类似于能够使用webbrowser控件打开网页吗?

基本上我想打开notepad或其他exe,但是使用xaml / c#代码将它限制在WPF窗口容器中?不确定是否可能?

3 个答案:

答案 0 :(得分:6)

是的,这是可能的。

您所要做的就是:

  1. 创建WindowsFormsHost并将其添加到UI中的面板
  2. 使用Process.Start
  3. 启动流程(例如记事本)
  4. 调用process.WaitForInputIdle
  5. 使用process.MainWindowHandle获取窗口句柄
  6. 调用SetWindowPos将进程窗口设置为HwndHost窗口的坐标和Z顺序
  7. 将HwndHost和process.MainWindowHandle挂钩以检测大小更改并重复步骤5.
  8. 完成所有这些操作非常简单。效果是整个记事本窗口(或您启动的任何应用程序)出现,其行为就像它是WPF应用程序的一部分一样。

答案 1 :(得分:1)

设法使用SetParent方法

执行此操作
[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr SetParent(IntPtr hwc, IntPtr hwp);

所以通过获取wpf窗口的句柄然后获取exe窗口,我能够将wpf窗口设置为父窗口,因此它给出了嵌入的模拟(也关闭了标题栏等)

从这里获得帮助:http://channel9.msdn.com/forums/TechOff/250417-Hide-window-caption-in-c/

答案 2 :(得分:-1)

你做不到。

您可以查看网页的原因是因为IE是使用允许它的架构设计的 - 渲染引擎实际上不是实际IE可执行文件的一部分,而是暴露组件的DLL。

通用EXE无法正常工作,您无法将其嵌入到应用中。