Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.