在C#中显示另一个应用程序的WPF窗口

mah*_*nah 3 c# wpf winapi window process

我有一个名为app1的WPF应用程序,它有一个名为window1的窗口.当用户单击关闭按钮时window1,应用程序不会关闭,但window1会隐藏(this.hide()).

我想在启动时检查应用程序的另一个实例是否已在运行; 如果是这样,我想显示已经运行的实例并终止新实例.

我怎样才能做到这一点?

我知道如何检查进程以及如何关闭当前应用程序,但我不知道如何显示正在运行的另一个WPF进程的窗口...

在我的App启动活动中,我这样做:

private void Application_Startup(object sender, StartupEventArgs e)
{
    if(Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Count() > 1)
    {
        Application.Current.Shutdown(0);
    }
}  
Run Code Online (Sandbox Code Playgroud)

Ree*_*sey 6

一种典型的方法是使用互斥锁.这允许您阻止启动第二个实例(或者更确切地说,在应用程序的第二个实例检测它).

此时,您可以通知原始应用程序实例"显示"自身.这是一篇很好的文章,详细描述了整个过程(尽管使用的是Windows Forms).

对于WPF应用程序,您需要将此逻辑放在Application的启动逻辑中,并添加一个HwndSourceHook来处理您希望显示的WPF窗口中的Windows消息.