C# 在WPF中引入另一个流程
我有一个WPF应用程序。在应用程序内部单击按钮期间,我创建了一个新的进程,以打开一个新的应用程序,如下面的代码所示C# 在WPF中引入另一个流程,c#,.net,wpf,mvvm,C#,.net,Wpf,Mvvm,我有一个WPF应用程序。在应用程序内部单击按钮期间,我创建了一个新的进程,以打开一个新的应用程序,如下面的代码所示 var process = Process.Start(binaryLocation + @"\TestApp.exe", powDBop + " " + mDBop); processID = process.Id; 它很好用。现在的问题是,如果用户再次单击按钮,我将检查进程是否处于活动状态,如果进程处于活动
var process = Process.Start(binaryLocation
+ @"\TestApp.exe", powDBop + " " + mDBop);
processID = process.Id;
它很好用。现在的问题是,如果用户再次单击按钮,我将检查进程是否处于活动状态,如果进程处于活动状态,我需要将该应用程序的窗口置于前端
为此,我尝试了以下代码。但它正在失败
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;
有人吗?我想你可以用下面的代码来完成
var process = Process.Start(binaryLocation
+ @"\TestApp.exe", powDBop + " " + mDBop);
SetForegroundWindow(process.MainWindowHandle);
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
我想你可以用下面的代码来做
var process = Process.Start(binaryLocation
+ @"\TestApp.exe", powDBop + " " + mDBop);
SetForegroundWindow(process.MainWindowHandle);
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
Topmost=真的有效吗?@nkonishvt:Nop。窗口实例未被创建。does Topmost=true有效?@nkonishvt:Nop。窗口实例未被创建工作正常。但我有一个疑问。为什么要使用非托管代码[DllImport(“user32.dll”)]私有静态外部bool setforegroundindow(IntPtr hWnd);没有这一点能实现吗?我怀疑没有德林波特是可能的。但是,您可以使用某种进程间通信来向新进程发送消息。新进程可以通过将窗口带到前台来对消息作出反应。我认为hWnd目标窗口不属于WPF,因此它将始终为空。它应该位于同一应用程序域中。感谢您的帮助。工作正常。但我有一个疑问。为什么要使用非托管代码[DllImport(“user32.dll”)]私有静态外部bool setforegroundindow(IntPtr hWnd);没有这一点能实现吗?我怀疑没有德林波特是可能的。但是,您可以使用某种进程间通信来向新进程发送消息。新进程可以通过将窗口带到前台来对消息作出反应。我认为hWnd目标窗口不属于WPF,因此它将始终为空。它应该位于同一应用程序域中。无论如何,感谢您的帮助。