Función PeekMessageW (winuser.h)
Envía mensajes entrantes no puestos en cola, comprueba la cola de mensajes de subprocesos de un mensaje publicado y recupera el mensaje (si existe alguno).
Sintaxis
BOOL PeekMessageW(
[out] LPMSG lpMsg,
[in, optional] HWND hWnd,
[in] UINT wMsgFilterMin,
[in] UINT wMsgFilterMax,
[in] UINT wRemoveMsg
);
Parámetros
[out] lpMsg
Tipo: LPMSG
Puntero a una estructura MSG que recibe información del mensaje.
[in, optional] hWnd
Tipo: HWND
Identificador de la ventana cuyos mensajes se van a recuperar. La ventana debe pertenecer al subproceso actual.
Si hWnd es NULL, PeekMessage recupera los mensajes de cualquier ventana que pertenezca al subproceso actual y cualquier mensaje de la cola de mensajes del subproceso actual cuyo valor hwnd sea NULL (vea la estructura MSG ). Por lo tanto, si hWnd es NULL, se procesan los mensajes de ventana y los mensajes de subproceso.
Si hWnd es -1, PeekMessage recupera solo los mensajes de la cola de mensajes del subproceso actual cuyo valor hwnd es NULL, es decir, los mensajes de subproceso que publica PostMessage (cuando el parámetro hWnd es NULL) o PostThreadMessage.
[in] wMsgFilterMin
Tipo: UINT
Valor del primer mensaje del intervalo de mensajes que se van a examinar. Use WM_KEYFIRST (0x0100) para especificar el primer mensaje de teclado o WM_MOUSEFIRST (0x0200) para especificar el primer mensaje del mouse.
Si wMsgFilterMin y wMsgFilterMax son cero, PeekMessage devuelve todos los mensajes disponibles (es decir, no se realiza ningún filtrado de intervalos).
[in] wMsgFilterMax
Tipo: UINT
Valor del último mensaje del intervalo de mensajes que se van a examinar. Use WM_KEYLAST para especificar el último mensaje de teclado o WM_MOUSELAST para especificar el último mensaje del mouse.
Si wMsgFilterMin y wMsgFilterMax son cero, PeekMessage devuelve todos los mensajes disponibles (es decir, no se realiza ningún filtrado de intervalos).
[in] wRemoveMsg
Tipo: UINT
Especifica cómo se van a controlar los mensajes. Este parámetro puede ser uno o más de los siguientes valores.
Valor | Significado |
---|---|
|
PeekMessage no quita los mensajes de la cola después del procesamiento. |
|
PeekMessage quita los mensajes de la cola después del procesamiento. |
|
Impide que el sistema libere cualquier subproceso que esté esperando a que el autor de la llamada vaya inactivo (consulte WaitForInputIdle).
Combine este valor con PM_NOREMOVE o PM_REMOVE. |
De forma predeterminada, se procesan todos los tipos de mensajes. Para especificar que solo se debe procesar un mensaje determinado, especifique uno o varios de los valores siguientes.
Valor devuelto
Tipo: BOOL
Si hay un mensaje disponible, el valor devuelto es distinto de cero.
Si no hay mensajes disponibles, el valor devuelto es cero.
Comentarios
PeekMessage recupera los mensajes asociados a la ventana identificada por el parámetro hWnd o cualquiera de sus elementos secundarios según lo especificado por la función IsChild y dentro del intervalo de valores de mensaje proporcionados por los parámetros wMsgFilterMin y wMsgFilterMax . Tenga en cuenta que una aplicación solo puede usar la palabra baja en los parámetros wMsgFilterMin y wMsgFilterMax ; la palabra alta está reservada para el sistema.
Tenga en cuenta que PeekMessage siempre recupera WM_QUIT mensajes, independientemente de los valores que especifique para wMsgFilterMin y wMsgFilterMax.
Durante esta llamada, el sistema envía mensajes pendientes y no puestos en cola, es decir, mensajes enviados a ventanas que pertenecen al subproceso de llamada mediante la función SendMessage, SendMessageCallback, SendMessageTimeout o SendNotifyMessage. A continuación, se recupera el primer mensaje en cola que coincide con el filtro especificado. El sistema también puede procesar eventos internos. Si no se especifica ningún filtro, los mensajes se procesan en el orden siguiente:
- Mensajes enviados
- Mensajes publicados
- Mensajes de entrada (hardware) y eventos internos del sistema
- Mensajes enviados (de nuevo)
- mensajes de WM_PAINT
- mensajes de WM_TIMER
La función PeekMessage normalmente no quita WM_PAINT mensajes de la cola. WM_PAINT mensajes permanecen en la cola hasta que se procesan. Sin embargo, si un mensaje de WM_PAINT tiene una región de actualización NULL , PeekMessage la quita de la cola.
Si una ventana de nivel superior deja de responder a los mensajes durante más de varios segundos, el sistema considera que la ventana no responde y la reemplaza por una ventana fantasma que tiene el mismo orden z, ubicación, tamaño y atributos visuales. Esto permite al usuario moverla, cambiar su tamaño o incluso cerrar la aplicación. Sin embargo, estas son las únicas acciones disponibles porque la aplicación realmente no responde. Cuando se depura una aplicación, el sistema no genera una ventana fantasma.
Virtualización de PPP
Esta API no participa en la virtualización de PPP. La salida está en el modo de la ventana de destino del mensaje. No se tiene en cuenta el subproceso que realiza la llamada.Ejemplos
Para obtener un ejemplo, vea Examinar una cola de mensajes.
Nota
El encabezado winuser.h define PeekMessage 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 (incluya 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
Otros recursos
Referencia