Как сфокусировать приложение Windows WPF из App.xaml.cs

Я знаю, что это не очень хорошая практика, но все же это то, что я хотел бы реализовать.

У меня есть приложение Windows WPF, которое я хочу запустить только один экземпляр. Если пользователь попытается запустить программу снова, в окне сообщения появится сообщение о том, что программа уже запущена. Эта проверка выполняется в app.xaml.cs.

Все идет нормально. Все работает как положено.

Я хотел бы расширить эту функциональность, чтобы сосредоточиться и перенести главное окно программы на передний план рабочего стола пользователя, поверх других окон и приложений. Я перепробовал множество подходов, но не могу заставить его работать. Это также должно происходить в app.xaml.cs, где я проверяю, запущено ли уже приложение.

Это не возможно сделать это в WPF? Я пробовал pinvokes и другие вещи, но, кажется, ничего не работает для меня.

С наилучшими пожеланиями

Nicki

2 ответа

Решение

Я нашел решение.

Добавление ссылки на VisualBasic дает доступ к Interactive.AppActivate, который может активировать любой процесс с заданным идентификатором процесса, который я уже реализовал.

Эта страница дала мне решение AppActivate в C#

Я проверяю процесс запуска следующим образом

Process currentProcess = Process.GetCurrentProcess();
        var runningProcess = (from process in Process.GetProcesses()
                              where
                                process.Id != currentProcess.Id &&
                                process.ProcessName.Equals(
                                  currentProcess.ProcessName,
                                  StringComparison.Ordinal)
                              select process).FirstOrDefault();
        if (runningProcess != null)
        {
            Microsoft.VisualBasic.Interaction.AppActivate(runningProcess.Id);
            return;
        }

Вы пытались активировать его?

Application.Current.MainWindow.Activate();

Конечно, если вам нравится всегда оставаться на вершине, чем:

Application.Current.MainWindow.Topmost = true;
Другие вопросы по тегам