3 Stimmen

Wie erkennt man, ob eine Anwendung durch Klicken in der Taskleiste aktiviert ist?

Ich habe eine Anwendung mit mehreren Fenstern, bei der nur das Hauptfenster in der Taskleiste erscheint.

Mit einem Klick auf das Symbol in der Taskleiste möchte ich, dass alle meine Anwendungsfenster über allen anderen geöffneten Fenstern angezeigt werden.

Ich habe das Ereignis Form_Activated ausprobiert, aber dieses wird auch ausgelöst, wenn die Anwendung durch einen direkten Klick im Hauptfenster aktiviert wird.

Wie kann ich also erkennen, ob jemand die Anwendung nur über die Taskleiste aktiviert hat?

4voto

Hans Passant Punkte 894572

So funktioniert es bereits. Sie müssen jedoch die Show(owner)-Überladung verwenden, damit die "Kind"-Fenster immer über Ihrem Hauptfenster liegen und nicht hinter dem Fenster einer anderen Anwendung verloren gehen können. Fast jedes kommerzielle Programm funktioniert auf diese Weise.

Die Unterscheidung zwischen aktivierten Gründen ist möglich, Windows liefert das Fensterhandle des zuvor aktiven Fensters. Sie könnten dann prüfen, ob es sich um eines Ihrer eigenen Fenster handelt. Dies ist jedoch im Ereignis nicht verfügbar, Sie müssen die Meldung selbst abfangen. Etwa so:

    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");
            }
        }
    }

0voto

Form_Activated funktioniert bei mir...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X