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;

Reply via email to