Maximizar a aplicação na bandeja do sistema?
-
26-09-2019 - |
Pergunta
Escrevi um pequeno aplicativo WPF que, quando 'fechado', minimiza a bandeja do sistema (requisito do cliente). O clique duas vezes compra o backup ou o clique com o botão direito do mouse, fornece um menu de contexto para sair.
Mas se o aplicativo for minimizado e os usuários navegam para iniciar-> todos os programas-> O aplicativo inicia uma nova instância.
O que (em C#) preciso fazer para obter o aplicativo para maximizar a instância em execução se o usuário fizer isso em vez de iniciar uma nova instância?
Obrigado!
Solução
este responda de Jon Skeet discute o uso de um mutex para fazer isso
Mutex é o caminho a percorrer. É muito menos frágil do que usar nomes de processos etc.
No entanto, você precisa garantir que o mutex não seja coletado com lixo. No caso de um serviço (que é orientado a eventos, em vez de ter um método "principal" que é concluído), a maneira mais sensata de fazer isso provavelmente é colocá -lo em uma variável estática.
Descarte o Mutex quando o serviço parar, para que você não precise esperar pela finalização ou algo assim.
Matthew Brindley dá este exemplo na mesma pergunta para sua resposta
[STAThread]
static void Main()
{
using(Mutex mutex = new Mutex(false, "Global\\" + appGuid))
{
if(!mutex.WaitOne(0, false))
{
MessageBox.Show("Instance already running");
return;
}
Application.Run(new Form1());
}
}
Para maximizar o outro aplicativo, você precisará enviar a mensagem para maximizar. Veja este artigo sobre envio de mensagens