在 Windows 10 版本 2004/20H2/21H1/21H2 中,使用訊息篩選的使用者定義應用程式可能會變得沒有回應
本文可協助您在使用自己的訊息篩選器的應用程式停止回應 Windows 10 時解決問題。
適用於:Windows 10、版本 2004、Windows 10、版本 20H2、Windows 10、版本 21H1、Windows 10、版本 21H2
徵狀
假設您在 Windows 10 2004/20H2/21H1/21H2 版上執行應用程式,而您的應用程式正在使用訊息篩選器。 在此案例中,應用程式可能會變得沒有回應。
注意事項
Windows 11 中未觀察到此問題。
原因
Windows 10 新增文字輸入系統或文字服務架構所使用的 Windows 訊息 (TSF) 。
注意事項
Windows 10,2004 版引進了新版的 TSF。
如果應用程式的訊息篩選器使用 PeekMessage
API 或 GetMessage
API 移除視窗訊息,且未將訊息傳遞至 DispatchMessage
API,則 TSF 無法完成處理訊息,且應用程式可能會停止回應。
如果應用程式具有類似下列範例的訊息篩選器,則可能會發生此問題,這隻會分派 WM_LBUTTONUP
訊息並移除其他訊息。
while(::PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
::TranslateMessage(&msg);
// Dispatch only specific messages.
if (msg.message == WM_LBUTTONUP) {
::DispatchMessage(&msg);
}
}
因應措施 1
修改訊息篩選器,只篩選必要的訊息,並透過 DispatchMessage
API 分派其他訊息。
while(::PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
::TranslateMessage(&msg);
if (msg.message == WM_LBUTTONDOWN) {
}
else {
// Dispatches all non-filtered messages
::DispatchMessage(&msg);
}
}
因應措施 2
如果您在 Windows 10 中使用新的 Microsoft IME,請啟用 Microsoft IME (Input Method 編輯器) 的相容性模式。
如需如何使用舊版 Microsoft IME 的詳細資訊,請參閱還原為舊版的 IME (輸入法 編輯器) 。
注意事項
建議您使用 IME 相容性設定做為暫時的因應措施。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應