From 572976bb1458d57a97733a51a709e20f9c97c6e2 Mon Sep 17 00:00:00 2001 From: Mark Jansen Date: Thu, 2 Aug 2018 22:36:17 +0200 Subject: [PATCH] [ZIPFLDR] Add 'Extract All' to individual item context menu. --- dll/shellext/zipfldr/CZipFolder.hpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/dll/shellext/zipfldr/CZipFolder.hpp b/dll/shellext/zipfldr/CZipFolder.hpp index 74dc42107b9..b5412639355 100644 --- a/dll/shellext/zipfldr/CZipFolder.hpp +++ b/dll/shellext/zipfldr/CZipFolder.hpp @@ -356,9 +356,33 @@ public: switch (uMsg) { case DFM_MERGECONTEXTMENU: - DPRINT1("FIXME: Add menu items for DFM_MERGECONTEXTMENU\n"); + { + CComQIIDPtr spContextMenu(psf); + if (!spContextMenu) + return E_NOINTERFACE; + + QCMINFO *pqcminfo = (QCMINFO *)lParam; + HRESULT hr = spContextMenu->QueryContextMenu(pqcminfo->hmenu, + pqcminfo->indexMenu, + pqcminfo->idCmdFirst, + pqcminfo->idCmdLast, + CMF_NORMAL); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; + + pqcminfo->indexMenu += HRESULT_CODE(hr); return S_OK; + } case DFM_INVOKECOMMAND: + { + CComQIIDPtr spContextMenu(psf); + if (!spContextMenu) + return E_NOINTERFACE; + + CMINVOKECOMMANDINFO ici = { sizeof(ici) }; + ici.lpVerb = MAKEINTRESOURCEA(wParam); + return spContextMenu->InvokeCommand(&ici); + } case DFM_INVOKECOMMANDEX: case DFM_GETDEFSTATICID: // Required for Windows 7 to pick a default return S_FALSE;