https://git.reactos.org/?p=reactos.git;a=commitdiff;h=56988ffbf8fff9e7d20130c52ddf7c9e972df658
commit 56988ffbf8fff9e7d20130c52ddf7c9e972df658 Author: Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com> AuthorDate: Mon Jan 20 22:26:33 2025 +0900 Commit: GitHub <nore...@github.com> CommitDate: Mon Jan 20 22:26:33 2025 +0900 [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 | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 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; + cmici.nShow = SW_NORMAL; + cmici.fMask = CMIC_MASK_UNICODE; + WCHAR szVerbW[MAX_PATH]; if (IS_INTRESOURCE(lpici->lpVerb)) + { cmici.lpVerb = MAKEINTRESOURCEA(uiCmdId - INNERIDOFFSET); + cmici.lpVerbW = MAKEINTRESOURCEW(uiCmdId - INNERIDOFFSET); + } else + { cmici.lpVerb = lpici->lpVerb; - cmici.nShow = SW_NORMAL; + SHAnsiToUnicode(lpici->lpVerb, szVerbW, _countof(szVerbW)); + cmici.lpVerbW = szVerbW; + } - /* FIXME: Support Unicode!!! */ - if (SHGetPathFromIDListA(m_FolderPidl, szDir)) + CHAR szDirA[MAX_PATH]; + WCHAR szDirW[MAX_PATH]; + if (SHGetPathFromIDListW(m_FolderPidl, szDirW)) { - cmici.lpDirectory = szDir; + SHUnicodeToAnsi(szDirW, szDirA, _countof(szDirA)); + cmici.lpDirectory = szDirA; + cmici.lpDirectoryW = szDirW; } - return m_Inner->InvokeCommand(&cmici); + return m_Inner->InvokeCommand((LPCMINVOKECOMMANDINFO)&cmici); } m_TrayWnd->ExecContextMenuCmd(uiCmdId); return S_OK;