2010-09-30 29 views
2

我有一個應用程序,其中只有主窗口出現在任務欄中的幾個窗口。如何通過單擊任務欄來檢測應用程序是否被激活

單擊任務欄中的圖標我希望所有應用程序窗口都顯示在任何其他打開的窗口之上。

我嘗試過Form_Activated事件,但是如果應用程序是通過在主窗口中直接點擊激活的,也會觸發此事件。

那麼如何檢測是否有人只是從任務欄激活應用程序?

+0

所以,如果你直接點擊主窗口,你**不要**也想顯示其他應用程序窗口? – 2010-09-30 19:56:26

回答

3

它已經這樣工作。但是,您必須使用Show(所有者)重載,以便「子」窗口始終位於主窗口的頂部,並且不會在其他應用程序的窗口後面丟失。幾乎所有的商業計劃都是這樣的。

區分激活原因是可能的,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適合我...

+0

但是,OP明確聲明這個事件已經過嘗試,並沒有做到預期的那樣。 – Patrick 2010-09-30 20:03:20

+0

它適用於我的機器。 – 2010-09-30 20:14:18

相關問題