Función PostMessageA (winuser.h)
Coloca (publicaciones) un mensaje en la cola de mensajes asociado al subproceso que creó la ventana especificada y devuelve sin esperar a que el subproceso procese el mensaje.
Para publicar un mensaje en la cola de mensajes asociada a un subproceso, use la función PostThreadMessage.
Sintaxis
BOOL PostMessageA(
[in, optional] HWND hWnd,
[in] UINT Msg,
[in] WPARAM wParam,
[in] LPARAM lParam
);
Parámetros
[in, optional] hWnd
Tipo: HWND
Identificador de la ventana cuyo procedimiento de ventana va a recibir el mensaje. Los valores siguientes tienen significados especiales.
A partir de Windows Vista, la publicación de mensajes está sujeta a UIPI. El subproceso de un proceso solo puede publicar mensajes en colas de mensajes de subprocesos en procesos de nivel de integridad menor o igual.
[in] Msg
Tipo: UINT
Mensaje que se va a publicar.
Para obtener listas de los mensajes proporcionados por el sistema, consulte System-Defined Mensajes.
[in] wParam
Tipo: WPARAM de
Información adicional específica del mensaje.
[in] lParam
Tipo: LPARAM
Información adicional específica del mensaje.
Valor devuelto
Tipo: BOOL de
Si la función se ejecuta correctamente, el valor devuelto es distinto de cero.
Si se produce un error en la función, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.
Observaciones
Cuando uiPI bloquea un mensaje, se recupera con GetLastError, se establece en 5 (acceso denegado).
Los mensajes de una cola de mensajes se recuperan mediante llamadas a la función GetMessage
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 mensajes del sistema (los del intervalo de 0 a (WM_USER-1)). Para enviar otros mensajes (los >= WM_USER) a otro proceso, debe realizar la serialización personalizada.
Si envía un mensaje en el intervalo siguiente WM_USER a las funciones de mensaje asincrónicas (PostMessage, SendNotifyMessagey SendMessageCallback), sus parámetros de mensaje no pueden incluir punteros. De lo contrario, se producirá un error en la operación. Las funciones devolverán antes de que el subproceso receptor haya tenido la oportunidad de procesar el mensaje y el remitente liberará la memoria antes de que se use.
No publique el mensaje de
Una aplicación de accesibilidad puede usar PostMessage para publicar mensajes WM_APPCOMMAND en el shell para iniciar aplicaciones. No se garantiza que esta funcionalidad funcione para otros tipos de aplicaciones.
Una cola de mensajes puede contener como máximo 10 000 mensajes. Este límite debe ser lo suficientemente grande. Si la aplicación supera el límite, se debe rediseñar para evitar consumir tantos recursos del sistema. Para ajustar este límite, modifique la siguiente clave del Registro.
HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows NT CurrentVersion Windows USERPostMessageLimit
Si se produce un error en la función, llame a GetLastError para obtener información de error extendida. GetLastError devuelve ERROR_NOT_ENOUGH_QUOTA cuando se alcanza el límite.
El valor mínimo aceptable es 4000.
Ejemplos
En el ejemplo siguiente se muestra cómo publicar un mensaje de ventana privada mediante la función
#define WM_COMPLETE (WM_USER + 0)
Puede publicar un mensaje en la cola de mensajes asociada al subproceso que creó la ventana especificada, como se muestra a continuación:
WaitForSingleObject (pparams->hEvent, INFINITE) ;
lTime = GetCurrentTime () ;
PostMessage (pparams->hwnd, WM_COMPLETE, 0, lTime);
Para obtener más ejemplos, consulte Iniciar un vínculo de datos.
Nota
El encabezado winuser.h define PostMessage como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Conventions for Function Prototypes.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows 2000 Professional [solo aplicaciones de escritorio] |
servidor mínimo admitido | Windows 2000 Server [solo aplicaciones de escritorio] |
de la plataforma de destino de |
Windows |
encabezado de |
winuser.h (incluya Windows.h) |
biblioteca de |
User32.lib |
DLL de |
User32.dll |
conjunto de API de |
ext-ms-win-ntuser-message-l1-1-0 (introducido en Windows 8) |
Consulte también
conceptual de
de referencia de