Alterar a visibilidade do formulário no NotifyIcon, clique e oculte-o em outro lugar

Tenho um aplicativo que está na bandeja do sistema. Quero torná-lo visível quando o usuário clicar nonotifyIcon, se ainda não estiver visível. Se já estiver visível, deve estar oculto. Além disso, quando o usuário clica em qualquer outro lugar, exceto no formulário, o formulário deve ocultar (se estiver visível

Meu código é assim:

protected override void OnDeactivated(EventArgs e)
{
    showForm(false);
}

public void showForm(bool show)
{
    if(show)
    {
        Show();
        Activate();
        WindowState = FormWindowState.Normal;
    }
    else
    {
        Hide();
        WindowState = FormWindowState.Minimized;
    }
}

private void notifyIcon1_MouseClicked(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        if (WindowState != FormWindowState.Normal)
        {
            showForm(true);
        }
    }
}

O problema com o código é queonDeactivated é chamado antes da chamada de clique, que oculta o formulário enotifyIcon1_MouseClicked do que apenas mostrá-lo novamente. Se eu pudesse detectar se o foco foi perdido devido a um clique emnotifyIcon ou em outro lugar, resolveria o problema.

Eu fiz minha pesquisa e encontrei um tópico semelhante, mas a solução acabou de detectar se a posição do mouse está sobre a bandeja quandoonDeactivated é chamado: Alterne a janela C # clicando em NotifyIcon (ícone da barra de tarefas)

UPDATE: A solução que publiquei detecta apenas se o mouse do usuário está sobre os ícones da bandeja na barra de tarefas; portanto, se você clicar em qualquer outra bandeja, aonDeactivated evento não será disparado. Desejo obter a mesma funcionalidade do aplicativo de volume do sistema.

questionAnswers(1)

yourAnswerToTheQuestion