Función SetForegroundWindow (winuser.h)

Trae el subproceso que creó la ventana especificada en primer plano y activa la ventana. La entrada del teclado se dirige a la ventana y se cambian varias indicaciones visuales para el usuario. El sistema asigna una prioridad ligeramente mayor al subproceso que creó la ventana de primer plano que a otros subprocesos.

Sintaxis

BOOL SetForegroundWindow(
  [in] HWND hWnd
);

Parámetros

[in] hWnd

Tipo: HWND

Identificador de la ventana que se debe activar y llevar al primer plano.

Valor devuelto

Tipo: BOOL

Si la ventana se trajo al primer plano, el valor devuelto es distinto de cero.

Si la ventana no se trajo al primer plano, el valor devuelto es cero.

Comentarios

El sistema restringe qué procesos pueden establecer la ventana de primer plano. Un proceso puede establecer la ventana de primer plano llamando a SetForegroundWindow solo si:

  • Todas las condiciones siguientes son verdaderas:
    • El proceso de llamada pertenece a una aplicación de escritorio, no a una aplicación para UWP o a una aplicación de la Tienda Windows diseñada para Windows 8 o 8.1.
    • El proceso de primer plano no ha deshabilitado las llamadas a SetForegroundWindow mediante una llamada anterior a la función LockSetForegroundWindow .
    • El tiempo de espera de bloqueo en primer plano ha expirado (consulte SPI_GETFOREGROUNDLOCKTIMEOUT en SystemParametersInfo).
    • No hay menús activos.
  • Además, se cumple al menos una de las siguientes condiciones:
    • El proceso de llamada es el proceso en primer plano.
    • El proceso de llamada se inició mediante el proceso de primer plano.
    • Actualmente no hay ninguna ventana de primer plano y, por tanto, no hay ningún proceso de primer plano.
    • El proceso de llamada recibió el último evento de entrada.
    • Se está depurando el proceso en primer plano o el proceso de llamada.

Es posible denegar un proceso el derecho de establecer la ventana de primer plano incluso si cumple estas condiciones.

Una aplicación no puede forzar una ventana al primer plano mientras el usuario está trabajando con otra ventana. En su lugar, Windows parpadea el botón de la barra de tareas de la ventana para notificar al usuario.

Un proceso que puede establecer la ventana de primer plano puede habilitar otro proceso para establecer la ventana de primer plano llamando a la función AllowSetForegroundWindow . El proceso especificado por el parámetro dwProcessId para AllowSetForegroundWindow pierde la capacidad de establecer la ventana de primer plano la próxima vez que el usuario genera la entrada, a menos que la entrada se dirija a ese proceso o la próxima vez que un proceso llame a AllowSetForegroundWindow, a menos que se especifique el mismo proceso que en la llamada anterior a AllowSetForegroundWindow.

El proceso de primer plano puede deshabilitar las llamadas a SetForegroundWindow llamando a la función LockSetForegroundWindow .

Ejemplo

En el ejemplo de código siguiente se muestra el uso de SetForegroundWindow.

// If the window is invisible we will show it and make it topmost without the
// foreground focus. If the window is visible it will also be made the
// topmost window without the foreground focus. If wParam is TRUE then
// for both cases the window will be forced into the foreground focus
if (uMsg == m_ShowStageMessage) {
    BOOL bVisible = IsWindowVisible(hwnd);
    SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0,
                    SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW |
                    (bVisible ? SWP_NOACTIVATE : 0));
    // Should we bring the window to the foreground
    if (wParam == TRUE) {
        SetForegroundWindow(hwnd);
    }
    return (LRESULT) 1;
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winuser.h (incluya Windows.h)
Library User32.lib
Archivo DLL User32.dll
Conjunto de API ext-ms-win-ntuser-window-l1-1-0 (introducido en Windows 8)

Consulte también

AllowSetForegroundWindow

Conceptual

FlashWindowEx

GetForegroundWindow

LockSetForegroundWindow

Referencia

SetActiveWindow

Windows