Como focar o aplicativo Windows WPF de App.xaml.cs
Pergunta
Sei que isso pode não ser uma boa prática, mas ainda assim é algo que gostaria de implementar.
Eu tenho um aplicativo Windows WPF do qual desejo executar apenas uma instância.Se o usuário tentar iniciar o programa novamente, uma caixa de mensagem será exibida informando que o programa já está em execução.Essa verificação é realizada em app.xaml.cs.
Até agora tudo bem.Tudo funciona conforme o esperado.
Gostaria de expandir essa funcionalidade para dar foco e trazer a janela principal do programa para a frente da área de trabalho do usuário, em detrimento de outras janelas e aplicativos.Eu tentei várias abordagens, mas não consigo fazer funcionar.Isso também deve acontecer em app.xaml.cs, onde testo se o aplicativo já está em execução.
Não é possível fazer isso no WPF?Eu tentei pinvokes e outras coisas, mas nada parece funcionar para mim.
Atenciosamente
Nicky
Solução 2
Eu encontrei uma solução.
Adicionar uma referência ao VisualBasic dá acesso ao Interactive.AppActivate, que pode ativar qualquer processo dado um processid, que eu já havia implementado.
Esta página me deu a solução AppActivate em C#
Eu verifico o processo em execução da seguinte maneira
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;
}
Outras dicas
Você já tentou ativá-lo?
Application.Current.MainWindow.Activate();
Claro, se você gosta de ficar por dentro o tempo todo, então:
Application.Current.MainWindow.Topmost = true;