Partager via


Une application définie par l’utilisateur utilisant des filtres de messages peut cesser de répondre dans Windows 10, version 2004/20H2/21H1/21H2

Cet article vous aide à résoudre le problème lorsqu’une application utilisant ses propres filtres de messages cesse de répondre dans Windows 10.

              S’applique à : Windows 10 version 2004, Windows 10 version 20H2, Windows 10 version 21H1 et Windows 10 version 21H2

Symptômes

Considérez le scénario dans lequel vous exécutez une application sur Windows 10, version 2004/20H2/21H1/21H2 et votre application utilise des filtres de messages. Dans ce scénario, l’application peut cesser de répondre.

Remarque

Ce problème n’est pas observé dans Windows 11.

Cause

Windows 10 ajoute les messages Windows utilisés par les systèmes de saisie de texte ou Text Services Framework (TSF).

Remarque

Windows 10, version 2004 a introduit la nouvelle version de TSF.

Si le filtre de messages de l’application supprime les messages Windows à l’aide de l’API PeekMessage ou de l’API GetMessage et ne transmet pas les messages à l’API DispatchMessage, TSF ne peut pas terminer le traitement des messages et l’application peut cesser de répondre.

Ce problème peut se produire si l’application dispose d’un filtre de messages similaire à l’exemple suivant, qui distribue uniquement les messagesWM_LBUTTONUP et supprime les autres messages.


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

Solution de contournement 1

Modifiez le filtre de messages de manière à filtrer uniquement les messages requis et envoyer les autres messages via l’API DispatchMessage.


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

Solution de contournement 2

Activez le mode de compatibilité de Microsoft IME (Input Method Editor), si vous utilisez le nouveau Microsoft IME dans Windows 10.

Pour plus d’informations sur l’utilisation de la version précédente de Microsoft IME, consultez Revenir à une version précédente d’un IME (Input Method Editor).

Remarque

Nous vous recommandons d’utiliser le paramètre de compatibilité IME comme solution de contournement temporaire.