puedo encontrar la descripción en MSDN un poco confuso también, pero aquí está mi revisada:
En primer lugar un primer plano y el fondo de la ventana no tienen nada que ver con las ventanas activas, tiene que ver con el roscado, ver más abajo. Por lo tanto, es técnicamente posible tener una ventana de fondo como una ventana activa; sin embargo, es confusa y el sistema no hace esto por usted; en su lugar, debe llamar a la aplicación, p. SetWindowPos para activar la ventana de fondo.
El sistema solo puede tener una ventana activa de nivel superior a la vez, el sistema activará la ventana de nivel superior si está trabajando en una ventana secundaria. Toda la entrada se dirige a la ventana activa y luego normalmente se pasa a la ventana secundaria.
/----------------------\
| |
| FOREGROUND WINDOW |--\
| | |
\----------------------/ |
| BACKGROUND WINDOW |
\-----------------------/
/----------------------\
| |
| ACTIVE WINDOW |--\
| | |
\----------------------/ |
| BACKGROUND WINDOW |
\-----------------------/
De MSDN
ventana activa
una ventana activa es la ventana de nivel superior de la aplicación con la que el usuario está trabajando actualmente. Para permitir que el usuario identifique fácilmente la ventana activa, el sistema la coloca en la parte superior del orden zy cambia el color de la barra de título y el borde de los colores de la ventana activa definida por el sistema. Solo una ventana de nivel superior puede ser una ventana activa. Cuando el usuario está trabajando con una ventana secundaria, el sistema activa la ventana principal de nivel superior asociada con la ventana secundaria.
primer plano/fondo
Cada proceso puede tener múltiples hilos de ejecución, y cada hilo puede crear ventanas. El hilo que creó la ventana con la que el usuario está trabajando actualmente se denomina hilo de primer plano, y la ventana se llama ventana de primer plano. Todos los otros subprocesos son subprocesos de fondo y las ventanas creadas por subprocesos de fondo se llaman ventanas de fondo.
Esta es _la_ respuesta correcta. También es útil leer [esta publicación del blog] (http://blogs.msdn.com/b/oldnewthing/archive/2008/10/06/8969399.aspx). – Ruslan
No es estrictamente cierto que al llamar a 'GetActiveWindow' desde un hilo de fondo devuelve' NULL'. Se puede activar una ventana de subproceso en segundo plano, sin convertirla en la ventana de primer plano (por ejemplo, llamando a 'SetForegroundWindow' sin cumplir los requisitos, o si cambia a otra aplicación entre el inicio de una aplicación y la aplicación que muestra su UI). Sin embargo, tiene casi razón sobre la ventana activa: la ventana activa se virtualiza por ** hilo ** (o grupo de hilos de entrada por entrada), no por aplicación o proceso. – IInspectable
La respuesta anterior que acepté fue editada posteriormente y ahora tiene poco sentido para mí. Entonces, cambié mi respuesta aceptada a esto, después de 5 y 1/2 años !!!!!!!!!!!!!!!!!!!!!! – JavaMan