Compartir a través de


Una aplicación definida por el usuario con filtros de mensajes puede dejar de responder en Windows 10, versión 2004/20H2/21H1/21H2

Este artículo le ayuda a resolver el problema cuando una aplicación que usa sus propios filtros de mensajes deja de responder en Windows 10.

Se aplica a: Windows 10, versión 2004, Windows 10, versión 20H2, Windows 10, versión 21H1, Windows 10, versión 21H2

Síntomas

Considere el escenario en el que ejecuta una aplicación en Windows 10, versión 2004/20H2/21H1/21H2 y la aplicación usa filtros de mensaje. En este escenario, la aplicación puede dejar de responder.

Nota:

Este problema no se observa en Windows 11.

Causa

Windows 10 agrega mensajes de Windows usados por sistemas de entrada de texto o Text Services Framework (TSF).

Nota:

Windows 10, versión 2004 introdujo la nueva versión de TSF.

Si el filtro de mensajes de la aplicación quita mensajes de Ventana mediante PeekMessage api o GetMessage API y no pasa mensajes a DispatchMessage la API, TSF no puede completar el procesamiento de los mensajes y la aplicación puede dejar de responder.

Este problema puede producirse si la aplicación tiene el filtro de mensajes similar al ejemplo siguiente, que envía WM_LBUTTONUP mensajes solo y quita otros mensajes.


while(::PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
    ::TranslateMessage(&msg);
    
    // Dispatch only specific messages.
    if (msg.message == WM_LBUTTONUP) {
        ::DispatchMessage(&msg);
    }
}

Solución alternativa 1

Modifique el filtro de mensajes para filtrar solo los mensajes necesarios y para enviar otros mensajes a través de DispatchMessage la API.


while(::PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
    ::TranslateMessage(&msg);
    
    if (msg.message == WM_LBUTTONDOWN) {
    
    }
    else {
        // Dispatches all non-filtered messages
        ::DispatchMessage(&msg);
    }
}

Solución alternativa 2

Habilite el modo de compatibilidad del IME de Microsoft (Editor de métodos de entrada), si usa el nuevo IME de Microsoft en Windows 10.

Para obtener más información sobre cómo usar la versión anterior del IME de Microsoft, vea Revertir a una versión anterior de un IME (Editor de métodos de entrada).

Nota:

Se recomienda usar la configuración de compatibilidad de IME como solución alternativa temporal.