Как сфокусировать приложение 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;