[SHELL32] Implement DelegateExecute verb handler and basic IShellItemArray (#6972)

This commit is contained in:
Whindmar Saksit 2024-06-04 15:38:49 +02:00 committed by GitHub
parent 01fbf25dab
commit 0d10fb814f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 265 additions and 84 deletions

View file

@ -1304,7 +1304,17 @@ CDefaultContextMenu::InvokeRegVerb(
if (lpcmi->fMask & CMIC_MASK_PTINVOKE)
pPtl = (POINTL*)&lpcmi->ptInvoke;
// TODO: IExecuteCommand
CComPtr<IExecuteCommand> pEC;
hr = SHELL_GetRegCLSID(VerbKey, L"command", L"DelegateExecute", clsid);
if (SUCCEEDED(hr))
hr = CoCreateInstance(clsid, NULL, CLSCTX_ALL, IID_PPV_ARG(IExecuteCommand, &pEC));
if (SUCCEEDED(hr))
{
CComPtr<IPropertyBag> pPB;
SHCreatePropertyBagOnRegKey(VerbKey, NULL, STGM_READ, IID_PPV_ARG(IPropertyBag, &pPB));
return InvokeIExecuteCommandWithDataObject(pEC, pEntry->Verb.GetString(), pPB, m_pDataObj,
lpcmi, static_cast<IContextMenu*>(this));
}
CComPtr<IDropTarget> pDT;
hr = SHELL_GetRegCLSID(VerbKey, L"DropTarget", L"CLSID", clsid);
@ -1312,7 +1322,10 @@ CDefaultContextMenu::InvokeRegVerb(
hr = CoCreateInstance(clsid, NULL, CLSCTX_ALL, IID_PPV_ARG(IDropTarget, &pDT));
if (SUCCEEDED(hr))
{
CComPtr<IPropertyBag> pPB;
SHCreatePropertyBagOnRegKey(VerbKey, NULL, STGM_READ, IID_PPV_ARG(IPropertyBag, &pPB));
IUnknown_SetSite(pDT, static_cast<IContextMenu*>(this));
IUnknown_InitializeCommand(pDT, pEntry->Verb.GetString(), pPB);
hr = SHSimulateDrop(pDT, m_pDataObj, KeyState, pPtl, NULL);
IUnknown_SetSite(pDT, NULL);
return hr;