https://git.reactos.org/?p=reactos.git;a=commitdiff;h=56988ffbf8fff9e7d2013…
commit 56988ffbf8fff9e7d20130c52ddf7c9e972df658
Author: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
AuthorDate: Mon Jan 20 22:26:33 2025 +0900
Commit: GitHub <noreply(a)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;