请帮助我,如何在WPF窗口中启动外部.exe应用程序。
在代码下面,我可以在WPF窗口中打开Notepad.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 Files\Atwin\Atwin2k2.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...
}
}
}
答案 0 :(得分:0)
可能有一些事情可能导致这种行为,这是我刚才遇到的两件事:
当我尝试使用vim.exe并且第一次发生异常时,Type Library未注册,因此我注册了,之后VIM.EXE成功加载。这可能是您的应用程序的行为。
当我尝试加载Eclipse时,没有例外,但Eclipse.exe是在WPF窗口之外加载的。查看Spy ++我发现WM_ACTIVATEAPP消息导致Windows在WPF窗口外打开,这里描述了原因:
http://support.microsoft.com/kb/89563
因此,取决于您尝试在WPF中打开的应用程序类型,应用程序不会打开每个应用程序,因为存在特定于应用程序的某些限制。
答案 1 :(得分:0)
string 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 + @"\bin\Debug\drag.exe");
p.Start();
//拖动是你的名字;