Freigeben über


Eine benutzerdefinierte Anwendung mit Nachrichtenfiltern reagiert in Windows 10, Version 2004/20H2/21H1/21H2, möglicherweise nicht mehr

Dieser Artikel hilft Ihnen, das Problem zu beheben, wenn eine Anwendung, die eigene Nachrichtenfilter verwendet, nicht mehr reagiert in Windows 10.

Gilt für: Windows 10, Version 2004, Windows 10, Version 20H2, Windows 10, Version 21H1, Windows 10, Version 21H2

Symptome

Berücksichtigen Sie das Szenario, in dem Sie eine Anwendung unter Windows 10, Version 2004/20H2/21H1/21H2 ausführen, und Ihre Anwendung verwendet Nachrichtenfilter. In diesem Szenario reagiert die Anwendung möglicherweise nicht mehr.

Hinweis

Dieses Problem wird in Windows 11 nicht beobachtet.

Ursache

Windows 10 fügt Windows-Nachrichten hinzu, die von Texteingabesystemen oder Text services Framework (TSF) verwendet werden.

Hinweis

Windows 10, Version 2004, hat die neue Version von TSF eingeführt.

Wenn der Nachrichtenfilter der Anwendung Fenstermeldungen mithilfe PeekMessage der API oder GetMessage API entfernt und keine Nachrichten an DispatchMessage die API übergibt, kann TSF die Verarbeitung der Nachrichten nicht abschließen, und die Anwendung reagiert möglicherweise nicht mehr.

Dieses Problem kann auftreten, wenn die Anwendung den Nachrichtenfilter aufweist, der dem folgenden Beispiel ähnelt, wodurch nur Nachrichten verteilt WM_LBUTTONUP und andere Nachrichten entfernt werden.


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

Problemumgehung 1

Ändern Sie den Nachrichtenfilter so, dass nur die erforderlichen Nachrichten gefiltert und andere Nachrichten über DispatchMessage die API verteilt werden.


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

Problemumgehung 2

Aktivieren Sie den Kompatibilitätsmodus des Microsoft IME (Eingabemethoden-Editors), wenn Sie den neuen Microsoft IME in Windows 10 verwenden.

Weitere Informationen zur Verwendung einer früheren Version von Microsoft IME finden Sie unter "Zurücksetzen auf eine frühere Version eines IME (Eingabemethoden-Editor)".

Hinweis

Es wird empfohlen, die IME-Kompatibilitätseinstellung als temporäre Problemumgehung zu verwenden.