Skip to content

Conversation

@fxliang
Copy link
Contributor

@fxliang fxliang commented Dec 24, 2025

fixed: #1760

pt.x, pt.y, hwnd, NULL);
_pTextService->_HandleLangBarMenuSelect(wID);
}
if (menu)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this check necessary?

@atmgnd
Copy link

atmgnd commented Dec 25, 2025

更新: 原因是 _GetFocusedContextWindow返回的句柄不符合要求(WHY), 但windbg查看是一个有效的句柄. 但sandbox里测试没有这个问题. 可能是其他什么软件或修改了Windows任务栏什么设置导致获取到的 句柄有差异 ?

使用自创建一临时窗口作为TrackPopupMenuEx的父窗口, 可以解决我电脑上的explorer崩溃问题. 内容如下, 仅供参考

 WeaselTSF/LanguageBar.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/WeaselTSF/LanguageBar.cpp b/WeaselTSF/LanguageBar.cpp
index a03b615..ebc04ea 100644
--- a/WeaselTSF/LanguageBar.cpp
+++ b/WeaselTSF/LanguageBar.cpp
@@ -166,7 +166,7 @@ STDAPI CLangBarItemButton::OnClick(TfLBIClick click,
     }
   } else if (click == TF_LBI_CLK_RIGHT) {
     /* Open menu */
-    HWND hwnd = _pTextService->_GetFocusedContextWindow();
+    HWND hwnd = CreateWindowEx(WS_EX_TOOLWINDOW, L"STATIC", L"WeaselMenuHost", WS_POPUP, 0, 0, 0, 0, HWND_DESKTOP, NULL, NULL, NULL);
     if (hwnd != NULL) {
       LANGID langid = get_language_id();
       HMENU menu;
@@ -178,10 +178,12 @@ STDAPI CLangBarItemButton::OnClick(TfLBIClick click,
         menu = LoadMenuW(g_hInst, MAKEINTRESOURCE(IDR_MENU_POPUP));
       }
       HMENU popupMenu = GetSubMenu(menu, 0);
+      SetForegroundWindow(hwnd);
       UINT wID = TrackPopupMenuEx(
           popupMenu, TPM_NONOTIFY | TPM_RETURNCMD | TPM_HORPOSANIMATION, pt.x,
           pt.y, hwnd, NULL);
       DestroyMenu(menu);
+      DestroyWindow(hwnd);
       _pTextService->_HandleLangBarMenuSelect(wID);
     }
   }

不过以上修改虽然没有崩溃了, 但目前有一个小问题就是在开始菜单弹出(按win)的时候, rime右键会创建菜单失败(没有菜单弹出但,也无崩溃). 对我只要不崩溃就行了(通知区域很容易右键误触)

@fxliang fxliang closed this Jan 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

点击通知栏图标, 导致explorer崩溃

3 participants