У меня в Systray работает небольшая программа (агент) Windows Forms. Цель этого агента, написанного в C#
, - запускать другие программы, фокусировать их и выводить на первый план.
Этот агент получает команды для запуска других программ из браузера и сообщает ему об успешном запуске. Это означает, что браузер всегда работает и работает.
Запуск внешних программ из агента работает нормально, но у меня много проблем с тем, чтобы заставить работать фокус и приоритетную тему. Похоже, что браузер всегда в фокусе, а программы, запущенные из агента, перемещаются прямо за окном браузера.
Я пробовал следующие методы из User32.dll
безуспешно:
SetForegroundWindow(IntPtr handle)
SwitchToThisWindow(IntPtr hWnd, bool fAltTab)
Странно то, что если я запускаю агент в моей Visual Studio, фокус работает отлично!
Помощь очень ценится, так как я новичок в Windows.
Обновление 1: Я заметил, если, например, окно powershell (может быть что угодно) лежит над окном браузера, фокусировка окна запущенного процесса работает, как и ожидалось.
Обновление 2: Мне удалось получить правильную фокусировку, позвонив по номеру
SetWindowPos(browserProcess.MainWindowHandle, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
в окне процесса браузера и
SetWindowPos(process.MainWindowHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
в окне запущенного процесса. Но я думаю, что это плохой подход, поскольку окно браузера может исчезать за другими открытыми окнами. Я также попробовал
SetWindowPos(browserProcess.MainWindowHandle, process.MainWindowHandle, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
для переключения порядка Z окна браузера и окна процесса, но безуспешно.
Вопрос : Как я могу переключить Z-порядок процесса браузера и запущенного процесса?