2010-09-30 3 views
2

J'ai une application avec plusieurs fenêtres où seule la fenêtre principale apparaît dans la barre des tâches. Avec un clic sur l'icône dans la barre des tâches, je veux que toutes mes fenêtres d'application apparaissent au-dessus de toutes les autres fenêtres ouvertes.Comment détecter si l'application est activée en cliquant dans la barre des tâches

J'ai essayé l'événement Form_Activated mais celui-ci est également déclenché si l'application est activée par un clic direct dans la fenêtre principale.

Comment puis-je détecter si quelqu'un a activé l'application depuis la barre des tâches?

+0

Donc, si vous cliquez directement dans la fenêtre principale, vous ** ne voulez pas ** que les autres fenêtres de l'application apparaissent également? –

Répondre

3

Cela fonctionne déjà de cette façon. Vous devez cependant utiliser la surcharge Afficher (propriétaire) pour que les fenêtres 'enfant' soient toujours au-dessus de votre fenêtre principale et ne puissent pas être perdues derrière la fenêtre d'une autre application. Presque n'importe quel programme commercial fonctionne comme ça.

La distinction entre les raisons activées est possible, Windows fournit le handle de fenêtre de la fenêtre précédemment active. Lequel vous pourriez alors vérifier pour voir si c'était une de vos propres fenêtres. Ce n'est cependant pas disponible dans l'événement, vous devez attraper le message vous-même. Comme ceci:

protected override void WndProc(ref Message m) { 
     base.WndProc(ref m); 
     // Trap WM_ACTIVATE when we get active 
     if (m.Msg == 6 && m.WParam.ToInt32() == 1) { 
      if (Control.FromHandle(m.LParam) == null) { 
       Console.WriteLine("activated from another process"); 
      } 
     } 
    } 
0

Form_Activated fonctionne pour moi ...

+0

Mais l'OP déclare explicitement que cet événement a été essayé et n'a pas fait ce qui était attendu. – Patrick

+0

Cela fonctionne sur ma machine. –

Questions connexes