如何通过单击任务栏来检测应用程序是否已激活

时间:2010-09-30 19:47:16

标签: c# .net

我有一个带有几个窗口的应用程序,其中只有主窗口出现在任务栏中。

点击任务栏中的图标,我希望我的所有应用程序窗口都显示在任何其他打开的窗口之上。

我尝试过Form_Activated事件,但如果通过主窗口中的直接点击激活了应用程序,也会触发此事件。

那么我如何检测是否有人仅从任务栏激活了应用程序?

2 个答案:

答案 0 :(得分: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");
            }
        }
    }

答案 1 :(得分:0)

Form_Activated对我有用......