@GoldSerg

Как запущенное через Process.Start приложение вывести на передний план (Win10)?

Есть строка запуска стороннего приложение через путь:

IntPtr hWnd = Process.Start(pathExe);
SetForegroundWindow(hWnd);

[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);


При работе под Windows 10 никакие способы, упоминающиеся на форумах, не выводят приложение на передний план. Максимум, оно мигает на панели задач, и все.

Пробовал SetForegroundWindow, ShowWindow (с различными параметрами), симуляцию нажатия ALT приложения... Ничего не помогает. Но способ однозначно есть - на моей клавиатуре от SteelSeries есть возможность назначить запуск любого приложения на произвольную клавишу. И там запускаемое приложение выводится на передний план поверх других. Как это сделать в .Net core под Win10?
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ответы на вопрос 2
petermzg
@petermzg
Самый лучший программист
Process.Start(...)
по результату выполнения отдает инстанс класса Process, а не IntPtr, что вы считаете хердлом окна.
Вот у Process уже есть свойство MainWindowHandle, его можно и попробовать.

Если там будет null, то тут вам уже придется по полной использовать WinAPI и функции из него (EnumWindows, GetWindowThreadProcessId)
Ответ написан
@GNation
Всё, что я смог найти:
Process process = Process.Start("");

// Ждем немного, чтобы процесс успел запуститься и инициализировать свое окно
Thread.Sleep(500);

if (process != null)
{
    // Ждем появления главного окна процесса
    process.WaitForInputIdle();

    // Получаем хэндл окна
    ntPtr hWnd = process.MainWindowHandle;

    if (hWnd != IntPtr.Zero)
    {
        // Если окно свернуто, восстанавливаем его
        ShowWindow(hWnd, SW_RESTORE);

        // Выводим окно на передний план
        SetForegroundWindow(hWnd);
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы