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

Foi útil?

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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top