¿Hay alguna forma de verificar mediante programación la prioridad de los mensajes de una ventana en su cola de mensajes?
Por ejemplo: algunos de los mensajes de ventana, WM_PAINT
y WM_TIMER
se sabe que tienen la prioridad más baja y se colocan después de los mensajes con la prioridad más alta.
Estoy buscando algo por lo que pueda confirmar cuál de los dos mensajes tendrá la prioridad más baja o más alta o qué mensaje se enviará primero o último.
No es así como funciona, los mensajes de Windows no tienen una prioridad adjunta. Está determinado principalmente por cómo se genera el mensaje. Un bucle de mensajes envía mensajes en este orden:
- primero, los mensajes generados con SendMessage() se envían en el orden en que se realizaron las llamadas
- a continuación, cualquier mensaje generado con PostMessage() y almacenado en la cola de mensajes, en orden de cola
- a continuación, cualquier mensaje que se sintetice desde el estado de la ventana. WM_TIMER, WM_PAINT y WM_MOUSEMOVE encajan en esta categoría.
La cláusula ‘sintetizado a partir del estado de la ventana’ es lo que hace que WM_PAINT y WM_TIMER parezcan tener una prioridad baja. Y por qué mover el mouse rápidamente no inunda la cola de mensajes con mensajes del mouse. Sin embargo, eso no es exclusivo, puede, por ejemplo, llamar a UpdateWindow() para forzar el envío de un mensaje WM_PAINT, haciendo que se envíe con una ‘prioridad alta’.
El orden se define en Obtener mensaje / PeekMensaje documentación:
Si no se especifica ningún filtro, los mensajes se procesan en el siguiente orden:
- Mensajes enviados
- Mensajes publicados
- Mensajes de entrada (hardware) y eventos internos del sistema
- Mensajes enviados (otra vez)
- Mensajes WM_PAINT
- Mensajes WM_TIMER
Independientemente de si eso es posible, dependiendo del orden de los mensajes, está utilizando algo que no está cubierto por el contrato de API. Y eso hace que su programa sea vulnerable a romperse en la versión futura de Windows (u otra implementación como WINE). no lo hagas
– Gato Plus Plus
27 de agosto de 2011 a las 18:03