Ich finde die Beschreibung in MSDN ein bisschen auch verwirrend, aber hier mein überarbeitet nehmen ist:
Zuerst ein Vordergrund- und Hintergrundfenster nichts mit aktiven Fenstern zu tun, es hat mit einem Gewinde zu tun, siehe unten. Daher ist es technisch möglich, ein Hintergrundfenster als aktives Fenster zu verwenden, es ist jedoch verwirrend und das System tut dies nicht für Sie, stattdessen muss Ihre App z. SetWindowPos, um das Hintergrundfenster aktiv zu machen.
Das System kann immer nur ein aktives Fenster der obersten Ebene haben, das System aktiviert das Fenster der obersten Ebene, wenn Sie an einem untergeordneten Fenster arbeiten. Alle Eingaben werden dann in das aktive Fenster geleitet und dann normalerweise an das untergeordnete Fenster übergeben.
/----------------------\
| |
| FOREGROUND WINDOW |--\
| | |
\----------------------/ |
| BACKGROUND WINDOW |
\-----------------------/
/----------------------\
| |
| ACTIVE WINDOW |--\
| | |
\----------------------/ |
| BACKGROUND WINDOW |
\-----------------------/
Von MSDN
aktives Fenster
Ein aktives Fenster ist das Fenster der obersten Ebene der Anwendung, mit der der Benutzer gerade arbeitet. Damit der Benutzer das aktive Fenster leicht identifizieren kann, platziert das System es an der Spitze der Z-Reihenfolge und ändert die Farbe seiner Titelleiste und seines Rahmens in die systemdefinierten aktiven Fensterfarben. Nur ein Fenster der obersten Ebene kann ein aktives Fenster sein. Wenn der Benutzer mit einem untergeordneten Fenster arbeitet, aktiviert das System das übergeordnete Fenster der obersten Ebene, das dem untergeordneten Fenster zugeordnet ist.
Vordergrund/Hintergrund
Jeder Prozess kann mehrere Ausführungs-Threads haben, und jeder Thread Fenster zu schaffen. Der Thread, der das Fenster erstellt hat, mit dem der Benutzer gerade arbeitet, wird als Vordergrund-Thread bezeichnet, und das Fenster wird als Vordergrundfenster bezeichnet. Alle anderen Threads sind Hintergrundthreads und die von Hintergrundthreads erzeugten Fenster werden als Hintergrundfenster bezeichnet.
Dies ist die richtige Antwort. Auch nützlich zu lesen ist [dieser Blog-Beitrag] (http://blogs.msdn.com/b/oldnewthing/archive/2008/10/06/8969399.aspx). – Ruslan
Es ist nicht streng zutreffend, dass das Aufrufen von 'GetActiveWindow' aus einem Hintergrundthread 'NULL' zurückgibt. Das Fenster eines Hintergrundthreads kann aktiviert werden, ohne es zum Vordergrundfenster zu machen (z. B. durch Aufrufen von 'SetForegroundWindow', ohne die Anforderungen zu erfüllen, oder wenn Sie zwischen dem Start einer Anwendung und der Anwendung, die die Benutzeroberfläche anzeigt, zu einer anderen Anwendung wechseln). Mit dem aktiven Fenster haben Sie jedoch fast Recht: Das aktive Fenster wird per ** thread ** (oder input-attached thread group) virtualisiert, nicht pro Anwendung oder Prozess. – IInspectable
Die vorherige Antwort, die ich angenommen habe, wurde später bearbeitet und ergibt für mich jetzt wenig Sinn. Also, ich habe meine akzeptierte Antwort geändert, nach 5 und 1/2 Jahren !!!!!!!!!!!!!!!!!!!!!! – JavaMan