Función GetMessageW (winuser.h)
Recupera un mensaje de la cola de mensajes del subproceso de llamada. La función envía mensajes enviados entrantes hasta que haya un mensaje publicado disponible para su recuperación.
A diferencia de GetMessage, la función PeekMessage no espera a que se publique un mensaje antes de volver.
Sintaxis
BOOL GetMessageW(
[out] LPMSG lpMsg,
[in, optional] HWND hWnd,
[in] UINT wMsgFilterMin,
[in] UINT wMsgFilterMax
);
Parámetros
[out] lpMsg
Tipo: de LPMSG de
Puntero a un estructura de msg que recibe información del mensaje de la cola de mensajes del subproceso.
[in, optional] hWnd
Tipo: HWND
Identificador de la ventana cuyos mensajes se van a recuperar. La ventana debe pertenecer al subproceso actual.
Si
Si
[in] wMsgFilterMin
Tipo: UINT
Valor entero del valor de mensaje más bajo que se va a recuperar. Use WM_KEYFIRST (0x0100) para especificar el primer mensaje de teclado o WM_MOUSEFIRST (0x0200) para especificar el primer mensaje del mouse.
Use WM_INPUT aquí y en wMsgFilterMax para especificar solo los mensajes de WM_INPUT.
Si wMsgFilterMin y wMsgFilterMax son cero, GetMessage devuelve todos los mensajes disponibles (es decir, no se realiza ningún filtrado de intervalo).
[in] wMsgFilterMax
Tipo: UINT
Valor entero del valor de mensaje más alto que se va a recuperar. Use WM_KEYLAST para especificar el último mensaje de teclado o WM_MOUSELAST para especificar el último mensaje del mouse.
Use WM_INPUT aquí y en wMsgFilterMin para especificar solo los mensajes de WM_INPUT.
Si wMsgFilterMin y wMsgFilterMax son cero, GetMessage devuelve todos los mensajes disponibles (es decir, no se realiza ningún filtrado de intervalo).
Valor devuelto
Tipo: BOOL de
Si la función recupera un mensaje distinto de WM_QUIT, el valor devuelto es distinto de cero.
Si la función recupera el mensaje WM_QUIT, el valor devuelto es cero.
Si se produce un error, el valor devuelto es -1. Por ejemplo, la función produce un error si hWnd es un identificador de ventana no válido o lpMsg es un puntero no válido. Para obtener información de error extendida, llame a GetLastError.
Dado que el valor devuelto puede ser distinto de cero, cero o -1, evite código similar al siguiente:
while (GetMessage( lpMsg, hWnd, 0, 0)) ...
La posibilidad de un valor devuelto -1 en caso de que hWnd sea un parámetro no válido (como hacer referencia a una ventana que ya se ha destruido) significa que dicho código puede provocar errores graves de aplicación. En su lugar, use código similar al siguiente:
BOOL bRet;
while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Observaciones
Normalmente, una aplicación usa el valor devuelto para determinar si finalizar el bucle de mensajes principal y salir del programa.
La función
Tenga en cuenta que GetMessage siempre recupera WM_QUIT mensajes, independientemente de los valores que especifique para wMsgFilterMin y wMsgFilterMax.
Durante esta llamada, el sistema entrega mensajes pendientes y no puestos en cola, es decir, mensajes enviados a ventanas que pertenecen al subproceso de llamada mediante elSendMessage
- 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
GetMessage no quita WM_PAINT mensajes de la cola. Los mensajes permanecen en la cola hasta que se procesan.
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 está en el modo del depurador, 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 Crear un bucle de mensajes.
Nota
El encabezado winuser.h define GetMessage 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
IsChild de
de referencia de