Función PostMessageA (winuser.h)
Places (publica) un mensaje en la cola de mensajes asociada 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.
Valor | Significado |
---|---|
|
El mensaje se publica en todas las ventanas de nivel superior del sistema, incluidas las ventanas deshabilitadas o invisibles, las ventanas superpuestas y las ventanas emergentes. El mensaje no se publica en ventanas secundarias. |
|
La función se comporta como una llamada a PostThreadMessage con el parámetro dwThreadId establecido en el identificador del subproceso actual. |
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, 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: BOOL
Si la función se realiza correctamente, el valor devuelto es distinto de cero.
Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.
Comentarios
Cuando un mensaje está bloqueado por UIPI, el último error, recuperado con GetLastError, se establece en 5 (acceso denegado).
Los mensajes de una cola de mensajes se recuperan mediante llamadas a la función GetMessage o PeekMessage .
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 envía un mensaje en el intervalo siguiente WM_USER a las funciones de mensaje asincrónicas (PostMessage, SendNotifyMessage y SendMessageCallback), sus parámetros de mensaje no pueden incluir punteros. De lo contrario, la operación presentará un error. 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 WM_QUIT mediante PostMessage; use la función PostQuitMessage .
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 PostMessage . Supongamos que ha definido un mensaje de ventana privada denominado WM_COMPLETE:
#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 Convenciones para prototipos de función.
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
Referencia