У меня есть окно, которое я показываю, используя метод Show (), как
_win.Show();
и TopMost
этого окна true
При нажатии кнопки в новом окне запускается новый процесс, чтобы открыть файл в соответствующей программе просмотра
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);
Кажется, это не работает для меня, поскольку _wnd
по-прежнему TopMost
. Однако, если я установлю
_wnd.TopMost = false;
После начала процесса (скажем, notepad.exe) окно блокнота становится позади _wnd
, но при щелчке окна блокнота оно выводится на передний план. Но в этом случае мне нужно отслеживать, завершился ли процесс, а затем сбросить TopMost
.
Любая помощь приветствуется.