如何在 WPF 窗口中启动外部.exe应用程序



请帮助我,如何在WPF窗口中启动外部.exe应用程序。

在下面的代码中,我能够在WPF窗口中打开记事本.exe和WinWord.exe应用程序,但不能打开其他应用程序..当我尝试打开其他.exe应用程序时,它会在单独的窗口中打开。

public partial class Window1 : Window
{
    public IntPtr MainWindowHandle { get; set; }

    [DllImport("user32.dll", SetLastError = true)]
    private static extern long SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

    //[DllImport("user32.dll", SetLastError = true)]
    //private static extern int GetWindowLong(IntPtr hWnd, int nIndex);
    public Window1()
    {
        InitializeComponent();
        try
        {
            //External exe inside WPF Window 
            System.Windows.Forms.Panel _pnlSched = new System.Windows.Forms.Panel();
            WindowsFormsHost windowsFormsHost1 = new WindowsFormsHost();
            windowsFormsHost1.Child = _pnlSched;
            _Grid.Children.Add(windowsFormsHost1);
            //_Grid.Children.Add(_pnlSched);
            ProcessStartInfo psi = new ProcessStartInfo(@"C:Program FilesAtwinAtwin2k2.exe");
            psi.WindowStyle = ProcessWindowStyle.Normal;
            Process PR = Process.Start(psi);
            PR.WaitForInputIdle(); // true if the associated process has reached an idle state.
            System.Threading.Thread.Sleep(3000);
            IntPtr hwd = PR.MainWindowHandle;
            SetParent(PR.MainWindowHandle, _pnlSched.Handle);  // loading exe to the wpf window.
        }
        catch (Exception ex)
        { 
            //Nothing...
        }
      }

}

可能有一些事情可能导致这种行为,这是我刚才遇到的两个独立的事情:

当我尝试使用 vim 时.exe第一次发生类型库未注册的异常,所以我注册了,之后 VIM.EXE 成功加载。这可能是应用程序的行为。

当我尝试加载 Eclipse 时,没有例外,但 Eclipse.exe 是在 WPF 窗口之外加载的。在Spy++中查找,我发现了导致Windows在WPF窗口之外打开的消息WM_ACTIVATEAPP该消息描述了原因:

http://support.microsoft.com/kb/89563

因此,取决于您尝试在 WPF 中打开的应用程序类型,并非每个应用程序都会打开,因为存在特定于应用程序的某些限制。

字符串 strReportPath = System.IO.Directory.GetCurrentDirectory();

        if (strReportPath.Substring(strReportPath.Length - 9) == "bin\Debug")
        {
            strReportPath = strReportPath.Substring(0, strReportPath.Length - 10);
        }
        Process p = new Process();
        p.StartInfo = new ProcessStartInfo(strReportPath + @"binDebugdrag.exe");
        p.Start();

拖动是你的 sln 名称;

相关内容

  • 没有找到相关文章

最新更新