C# 使流程从最上面的窗口开始
我有一个使用show()方法显示的窗口,如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();
_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顺序。