winapi - work - instagram hashtags first comment
Ventana de Foreground Vs Active (2)
En Windows, ¿cuál es la diferencia entre el primer plano y la ventana activa? Para ser específico, ¿bajo qué circunstancias una ventana en primer plano puede no ser una ventana activa? Si los 2 términos se refieren al mismo concepto, ¿por qué hay 2 términos?
La documentación de msdn aquí menciona "hacer clic en una ventana, o al usar la combinación de teclas ALT + TAB o ALT + ESC " hace que una ventana esté activa, así como en primer plano. No hay nada explícitamente sobre la diferencia entre los 2 términos. Verifique MSDN .
La descripción en MSDN me resulta un poco confusa también, pero aquí está mi revisión:
Primero, una ventana de fondo y de fondo no tiene nada que ver con las ventanas activas, tiene que ver con el enhebrado, ver abajo. Por lo tanto, es técnicamente posible tener una ventana de fondo como ventana activa, sin embargo, es confuso y el sistema no hace esto por usted; en su lugar, su aplicación necesita llamar, por ejemplo, a 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 |
/-----------------------/
Desde 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.
Fondo plano
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.
La ventana activa (el resultado de GetActiveWindow()
) es la ventana adjunta al hilo de llamada que obtiene entrada. La ventana de primer plano (el resultado de GetForegroundWindow()
) es la ventana que está recibiendo entrada actualmente, independientemente de su relación con el hilo de llamada. La ventana activa está esencialmente localizada en su aplicación; la ventana de primer plano es global para el sistema.
Por ejemplo, si una ventana perteneciente a otro proceso es el primer plano, al llamar a GetActiveWindow()
desde dentro de su propio proceso, se devolverá NULL
.
Creo que es cierto que ser la ventana en primer plano implica ser la ventana activa, pero lo contrario no es cierto. También tenga en cuenta que en Windows moderno, las aplicaciones generalmente no pueden usar SetForegroundWindow()
para robar el foco de otro proceso (a menos que ese proceso haya dado explícitamente permiso a través de AllowSetForegroundWindow
).