在WPF中引入另一个进程

时间:2016-05-27 08:35:48

标签: c# .net wpf mvvm

我有一个WPF应用程序。在按钮单击期间在应用程序内部,我创建了一个新进程,以便从我的视图模型中打开一个新的应用程序,如下面的代码。

var process = Process.Start(binaryLocation
                                  + @"\TestApp.exe", powDBop + " " + mDBop);

processID = process.Id;

工作正常。现在的问题是,如果用户再次点击该按钮,我会检查该进程是否处于活动状态,以及该进程是否存活我需要将该应用程序的Window置于最前面

为此,我尝试了下面的代码。但它失败了。

var winHandle = Process.GetProcessById(process.Id).MainWindowHandle;
HwndSource hwndSource = HwndSource.FromHwnd(winHandle);
var window = hwndSource.RootVisual as Window;
window.BringIntoView();
window.Activate();

hwndSource 未设置并保持为空。

我甚至尝试使用下面的代码,然后窗口仍返回null。

var winHandle = Process.GetProcessById(process.Id).MainWindowHandle;
Window window = (Window) HwndSource.FromHwnd(winHandle).RootVisual;

任何?

1 个答案:

答案 0 :(得分:2)

我认为您可以使用以下代码

来完成
var process = Process.Start(binaryLocation
                                  + @"\TestApp.exe", powDBop + " " + mDBop);

  SetForegroundWindow(process.MainWindowHandle);

 [DllImport("user32.dll")]
 private static extern bool SetForegroundWindow(IntPtr hWnd);