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

C# 如何通过单击任务栏来检测应用程序是否已激活,c#,.net,C#,.net,我有一个有几个窗口的应用程序,其中只有主窗口出现在任务栏中 单击任务栏上的图标,我希望我的所有应用程序窗口都显示在任何其他打开的窗口的顶部 我尝试了Form_Activated event,但如果通过在主窗口中直接单击激活应用程序,也会触发此事件 那么,我如何检测是否有人仅从任务栏激活了应用程序?Form\u activated对我有效…它已经是这样了。但是,您必须使用Show(owner)重载,以便“子”窗口始终位于主窗口的顶部,并且不能在另一个应用程序的窗口后面丢失。几乎所有的商业程序都是这

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

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

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


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

Form\u activated对我有效…

它已经是这样了。但是,您必须使用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");
            }
        }
    }

因此,如果您直接在主窗口中单击,您不希望其他应用程序窗口也显示出来?但OP明确表示此事件已尝试,并且没有执行预期的操作。