2010-09-30 2 views
2

У меня есть приложение с несколькими окнами, на панели задач появляется только главное окно.Как определить, активировано ли приложение, нажав на панели задач

С помощью щелчка на значке на панели задач я хочу, чтобы все окна приложения отображались поверх любых других открытых окон.

Я пробовал событие Form_Activated, но это также срабатывает, если приложение активируется прямым щелчком в главном окне.

Итак, как определить, активировал ли приложение приложение только с панели задач?

+0

Итак, если вы нажмете прямо в главном окне, вы ** не ** хотите, чтобы окна других приложений также отображались? –

ответ

3

Это уже работает именно так. Тем не менее вам приходится использовать перегрузку Show (owner), чтобы «дочерние» окна всегда находились поверх вашего основного окна и не могли потеряться за окном другого приложения. Практически любая коммерческая программа работает именно так.

Возможна различие между активированными причинами, Windows предоставляет дескриптор окна ранее активного окна. Что вы могли бы проверить, чтобы убедиться, что это один из ваших собственных окон. В этом случае это не доступно, вам нужно ловить сообщение самостоятельно. Примерно так:

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 works for me ...

+0

Но OP явно заявляет, что это событие было опробовано и не делало того, что ожидалось. – Patrick

+0

Он работает на моей машине. –

Смежные вопросы