如何在WPF应用程序中运行应用程序?

| 我的问题是如何在WPF应用程序中运行应用程序(.exe)。 我的意思是在应用程序窗口内运行,而不是在外部运行应用程序。 先谢谢了     
已邀请:
        您想要做的事情是完全可能的,但是它确实带有一些错误,因此不要指望轻松。您需要做的是创建一个继承自
HwndHost
并覆盖
BuildWindowCore()
方法的类。请参阅Microsoft的示例,网址为http://msdn.microsoft.com/zh-cn/library/ms752055.aspx 在上面的示例中,它们为您提供了可以在WPF表单中放置Win32控件的概念,但是您可以使用相同的体系结构将创建的记事本进程的“ 2”加载到边框的子级中。像这样:
protected override HandleRef BuildWindowCore(HandleRef hwndParent)
    {
        ProcessStartInfo psi = new ProcessStartInfo(\"notepad.exe\");
        psi.WindowStyle = ProcessWindowStyle.Minimized;
        _process = Process.Start(psi);
        _process.WaitForInputIdle();

        // The main window handle may be unavailable for a while, just wait for it
        while (_process.MainWindowHandle == IntPtr.Zero)
        {
            Thread.Yield();
        }

        IntPtr notepadHandle = _process.MainWindowHandle;

        int style = GetWindowLong(notepadHandle, GWL_STYLE);
        style = style & ~((int)WS_CAPTION) & ~((int)WS_THICKFRAME); // Removes Caption bar and the sizing border
        style |= ((int)WS_CHILD); // Must be a child window to be hosted

        SetWindowLong(notepadHandle, GWL_STYLE, style);
        SetParent(notepadHandle, hwndParent.Handle);

        this.InvalidateVisual();

        HandleRef hwnd = new HandleRef(this, notepadHandle);
        return hwnd;
    }
请记住,您将需要从User32.dll导入一些函数,以便能够设置窗口的样式并设置父窗口的句柄:
[DllImport(\"user32.dll\")]
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);

[DllImport(\"user32.dll\", SetLastError = true)]
private static extern int GetWindowLong(IntPtr hWnd, int nIndex);

[DllImport(\"user32\")]
private static extern IntPtr SetParent(IntPtr hWnd, IntPtr hWndParent);
还要确保您包括:
using System.Windows.Interop;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;
这是我在论坛上的第一个答案,所以如果需要一些工作,请告诉我。另请参考在WPF窗口中托管外部应用程序,但不必担心DwayneNeed的问题。就像在上面的代码中看到的那样,只需使用SetParent()即可。如果尝试将应用程序嵌入选项卡页中,请小心。您将在这里遇到一些乐趣。     

要回复问题请先登录注册