C# 使流程从最上面的窗口开始

C# 使流程从最上面的窗口开始,c#,wpf,C#,Wpf,我有一个使用show()方法显示的窗口,如 _win.Show(); 而此窗口的最顶端为真 在窗口中单击一个按钮时,将启动一个新进程,以在相应的查看器中打开一个文件 Process p = new Process(); p.Exited += new EventHandler(p_Exited); p.StartInfo.FileName = @"somepath"; p.EnableRaisingEvents = true; p.Start();

我有一个使用show()方法显示的窗口,如

 _win.Show();
而此窗口的
最顶端

在窗口中单击一个按钮时,将启动一个新进程,以在相应的查看器中打开一个文件

    Process p = new Process();
    p.Exited += new EventHandler(p_Exited);
    p.StartInfo.FileName = @"somepath";
    p.EnableRaisingEvents = true;
    p.Start();

   void p_Exited(object sender, EventArgs e)
   {

   }
我不希望这个过程是最重要的,直到结束。我试过的是

[DllImport("user32.dll")]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
static readonly IntPtr HWND_TOP =new IntPtr(0);
const UInt32 SWP_NOSIZE = 0x0001;
const UInt32 SWP_NOMOVE = 0x0002;
const UInt32 SWP_SHOWWINDOW = 0x0040;
并在下面使用
p.Start()作为

SetWindowPos(p.MainWindowHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
这似乎对我不起作用,因为
\u wnd
仍然是
最上面的
。但是如果我设置

_wnd.TopMost = false;
进程开始后(比如notepad.exe),记事本窗口位于
\wnd
后面,但单击记事本窗口时,它将被置于前面。但是在这种情况下,我需要监视进程是否结束,然后重置
最上面的

非常感谢您的帮助。

请尝试调用Activate()(或发送WM_Activate)您想要的实际顶部。最上面的窗口具有先到先得的z顺序。