Сделать процесс, начатый из окна самой верхней - PullRequest
2 голосов
/ 05 июня 2019

У меня есть окно, которое я показываю, используя метод 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.

Любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...