Función SendMessage (winuser.h)

Envía el mensaje especificado a una ventana o ventanas. La función SendMessage llama al procedimiento de ventana para la ventana especificada y no devuelve hasta que el procedimiento de ventana haya procesado el mensaje.

Para enviar un mensaje y devolverlo inmediatamente, use la función SendMessageCallback o SendNotifyMessage . Para publicar un mensaje en la cola de mensajes de un subproceso y devolverlo inmediatamente, use la función PostMessage o PostThreadMessage .

Sintaxis

LRESULT SendMessage(
  [in] HWND   hWnd,
  [in] UINT   Msg,
  [in] WPARAM wParam,
  [in] LPARAM lParam
);

Parámetros

[in] hWnd

Tipo: HWND

Identificador de la ventana cuyo procedimiento de ventana recibirá el mensaje. Si este parámetro es HWND_BROADCAST ((HWND)0xffff), el mensaje se envía a todas las ventanas de nivel superior del sistema, incluidas las ventanas deshabilitadas o invisibles, las ventanas superpuestas y las ventanas emergentes; pero el mensaje no se envía a las ventanas secundarias.

El envío de mensajes está sujeto a UIPI. El subproceso de un proceso solo puede enviar mensajes a colas de mensajes de subprocesos en procesos de nivel de integridad menor o igual.

[in] Msg

Tipo: UINT

El mensaje que se debe enviar.

Para obtener listas de los mensajes proporcionados por el sistema, vea Mensajes definidos por el sistema.

[in] wParam

Tipo: WPARAM

Información adicional específica del mensaje.

[in] lParam

Tipo: LPARAM

Información adicional específica del mensaje.

Valor devuelto

Tipo: LRESULT

El valor devuelto especifica el resultado del procesamiento del mensaje; depende del mensaje enviado.

Comentarios

Cuando un mensaje está bloqueado por UIPI, el último error, recuperado con GetLastError, se establece en 5 (acceso denegado).

Las aplicaciones que necesitan comunicarse mediante HWND_BROADCAST deben usar la función RegisterWindowMessage para obtener un mensaje único para la comunicación entre aplicaciones.

El sistema solo realiza la serialización de los mensajes del sistema (los del intervalo de 0 a (WM_USER-1)). Para enviar otros mensajes (aquellos >= WM_USER) a otro proceso, debe realizar la serialización personalizada.

Si el subproceso de llamada creó la ventana especificada, se llama inmediatamente al procedimiento de ventana como una subrutina. Si la ventana especificada se creó mediante un subproceso diferente, el sistema cambia a ese subproceso y llama al procedimiento de ventana adecuado. Los mensajes enviados entre subprocesos solo se procesan cuando el subproceso receptor ejecuta código de recuperación de mensajes. El subproceso de envío se bloquea hasta que el subproceso receptor procesa el mensaje. Sin embargo, el subproceso de envío procesará los mensajes entrantes no puestos en cola mientras espera a que se procese su mensaje. Para evitarlo, use SendMessageTimeout con SMTO_BLOCK establecido. Para obtener más información sobre los mensajes no puestos en cola, vea Mensajes no puestos en cola.

Una aplicación de accesibilidad puede usar SendMessage para enviar mensajes WM_APPCOMMAND al shell para iniciar aplicaciones. No se garantiza que esta funcionalidad funcione para otros tipos de aplicaciones.

Ejemplos

Para obtener un ejemplo, vea Mostrar la entrada del teclado.

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 (incluir Windows.h)
Library User32.lib
Archivo DLL User32.dll
Conjunto de API ext-ms-win-ntuser-message-l1-1-0 (introducido en Windows 8)

Consulte también

Conceptual

InSendMessage

Mensajes y colas de mensajes

PostMessage

PostThreadMessage

Referencia

RegisterWindowMessage

SendDlgItemMessage

SendMessageCallback

SendMessageTimeout

SendNotifyMessage