Compartir a través de


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).

Sintaxis

BOOL PeekMessageW(
  [out]          LPMSG lpMsg,
  [in, optional] HWND  hWnd,
  [in]           UINT  wMsgFilterMin,
  [in]           UINT  wMsgFilterMax,
  [in]           UINT  wRemoveMsg
);

Parámetros

[out] lpMsg

Tipo: de LPMSG de

Puntero a una estructura de 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 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 (consulte 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 mensajes en la cola de mensajes del subproceso actual cuyo valor hwnd es NULL, es decir, los mensajes de subproceso publicados por 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 intervalo).

[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 intervalo).

[in] wRemoveMsg

Tipo: UINT

Especifica cómo se van a controlar los mensajes. Este parámetro puede ser uno o varios de los siguientes valores.

Valor Significado
PM_NOREMOVE
0x0000
Los mensajes no se quitan de la cola después del procesamiento por PeekMessage.
PM_REMOVE
0x0001
Los mensajes se quitan de la cola después del procesamiento PeekMessage.
PM_NOYIELD
0x0002
Impide que el sistema libere cualquier subproceso que espere 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 Significado
PM_QS_INPUT
(QS_INPUT << 16)
Procesar mensajes de mouse y teclado.
PM_QS_PAINT
(QS_PAINT << 16)
Procesar mensajes de pintura.
PM_QS_POSTMESSAGE
((QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16)
Procesar todos los mensajes publicados, incluidos temporizadores y teclas de acceso rápido.
PM_QS_SENDMESSAGE
(QS_SENDMESSAGE << 16)
Procesar todos los mensajes enviados.

Valor devuelto

Tipo: BOOL de

Si hay un mensaje disponible, el valor devuelto es distinto de cero.

Si no hay ningún mensaje disponible, el valor devuelto es cero.

Observaciones

PeekMessage recupera los mensajes asociados a la ventana identificadas 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 el wMsgFilterMin y wMsgFilterMax parámetros. Tenga en cuenta que una aplicación solo puede usar la palabra baja en los parámetros de 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 (DispatchMessage) pending, nonqueued messages, that is, messages sent to windows owned by the calling thread using the SendMessage, SendMessageCallback, SendMessageTimeout, or SendNotifyMessage function. 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
Para recuperar los mensajes de entrada antes de los mensajes publicados, use los parámetros de wMsgFilterMin wMsgFilterMin y wMsgFilterMax.

Normalmente, la función peekMessage 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 un región de actualización NULL, PeekMessage lo 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 moverlo, 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 de

Esta API no participa en la virtualización de PPP. La salida está en el modo de la ventana que el mensaje tiene como destino. 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 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

GetMessage

IsChild de

msg

mensajes y colas de mensajes

otros recursos

de referencia de

WaitForInputIdle

waitMessage