Alternar la visibilidad del formulario en NotifyIcon, haga clic y ocultarlo al hacer clic en otro lugar

Tengo una aplicación que está en la bandeja del sistema. Quiero que sea visible cuando el usuario hace clic en lanotifyIcon, si ya no es visible. Si ya está visible, debería estar oculto. Además, cuando el usuario hace clic en cualquier otro lugar, excepto en el formulario, el formulario debe ocultarse (si está visible).

Mi código se ve así:

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);
        }
    }
}

El problema con el código es queonDeactivated recibe una llamada antes de la llamada de clic, que oculta el formulario ynotifyIcon1_MouseClicked que solo lo vuelve a mostrar. Si pudiera detectar si el foco se perdió debido a un clic ennotifyIcon o en otro lugar resolvería el problema.

Investigué y encontré un hilo similar, pero la solución solo detectó si la posición del mouse está sobre la bandeja cuandoonDeactivated recibe una llamada: C # alternar ventana haciendo clic en NotifyIcon (icono de la barra de tareas)

UPDATE: la solución que publiqué solo detecta si el mouse del usuario está sobre los iconos de la bandeja en la barra de tareas, por lo que si hace clic en cualquier otra bandeja, elonDeactivated evento no será despedido. Quiero obtener la misma funcionalidad que la aplicación de volumen del sistema.

Respuestas a la pregunta(1)

Su respuesta a la pregunta