From 56988ffbf8fff9e7d20130c52ddf7c9e972df658 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Mon, 20 Jan 2025 22:26:33 +0900 Subject: [PATCH] [EXPLORER] Support Unicode on Start Button InvokeCommand (#7644) Support Unicode on Start Button context menu for international text support. JIRA issue: N/A - Support Unicode in CStartMenuBtnCtxMenu::InvokeCommand method by using CMINVOKECOMMANDINFOEX structure. --- base/shell/explorer/startctxmnu.cpp | 36 ++++++++++++++++++----------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/base/shell/explorer/startctxmnu.cpp b/base/shell/explorer/startctxmnu.cpp index ccee6ef6a7e..83d176eb590 100644 --- a/base/shell/explorer/startctxmnu.cpp +++ b/base/shell/explorer/startctxmnu.cpp @@ -193,27 +193,37 @@ public: InvokeCommand(LPCMINVOKECOMMANDINFO lpici) { UINT uiCmdId = PtrToUlong(lpici->lpVerb); - if (!IsShellCmdId((UINT_PTR)lpici->lpVerb)) + if (!IsShellCmdId(uiCmdId)) { - CMINVOKECOMMANDINFO cmici = { 0 }; - CHAR szDir[MAX_PATH]; + CMINVOKECOMMANDINFOEX cmici = { sizeof(cmici) }; /* Setup and invoke the shell command */ - cmici.cbSize = sizeof(cmici); cmici.hwnd = m_Owner; - if (IS_INTRESOURCE(lpici->lpVerb)) - cmici.lpVerb = MAKEINTRESOURCEA(uiCmdId - INNERIDOFFSET); - else - cmici.lpVerb = lpici->lpVerb; cmici.nShow = SW_NORMAL; - - /* FIXME: Support Unicode!!! */ - if (SHGetPathFromIDListA(m_FolderPidl, szDir)) + cmici.fMask = CMIC_MASK_UNICODE; + WCHAR szVerbW[MAX_PATH]; + if (IS_INTRESOURCE(lpici->lpVerb)) { - cmici.lpDirectory = szDir; + cmici.lpVerb = MAKEINTRESOURCEA(uiCmdId - INNERIDOFFSET); + cmici.lpVerbW = MAKEINTRESOURCEW(uiCmdId - INNERIDOFFSET); + } + else + { + cmici.lpVerb = lpici->lpVerb; + SHAnsiToUnicode(lpici->lpVerb, szVerbW, _countof(szVerbW)); + cmici.lpVerbW = szVerbW; } - return m_Inner->InvokeCommand(&cmici); + CHAR szDirA[MAX_PATH]; + WCHAR szDirW[MAX_PATH]; + if (SHGetPathFromIDListW(m_FolderPidl, szDirW)) + { + SHUnicodeToAnsi(szDirW, szDirA, _countof(szDirA)); + cmici.lpDirectory = szDirA; + cmici.lpDirectoryW = szDirW; + } + + return m_Inner->InvokeCommand((LPCMINVOKECOMMANDINFO)&cmici); } m_TrayWnd->ExecContextMenuCmd(uiCmdId); return S_OK;