Создать DataObject из Shell Run / Help (MFC C++)
Мне нужна помощь в создании IDataObject для включения перетаскивания этих 2 элементов (Выполнить и Справка). Например, мне нужно сделать так же, как в Windows Startmenu.
чтобы запустить их, я использую эти
CComPtr<IShellDispatch2> pShellDisp;
if (SUCCEEDED(CoCreateInstance(CLSID_Shell,NULL,CLSCTX_SERVER,IID_IShellDispatch2,(void**)&pShellDisp)))
{
pShellDisp->Help(); //Help
pShellDisp->FileRun(); //Run
}
Ребята, вы можете мне помочь?
PS: мне нужно перетащить с изображением иконы тоже
РЕДАКТИРОВАТЬ [решено]
IShellFolder* desk = NULL;
HRESULT hr =SHGetDesktopFolder(&desk);
LPITEMIDLIST pidl2=NULL;
ULONG cbEaten;
DWORD dwAttribs = 0 ;
hr = desk->ParseDisplayName(NULL,
NULL,
L"shell:::{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}",
&cbEaten, // This can be NULL
&pidl2,
&dwAttribs);
hr = desk->GetUIObjectOf(parentHwnd, 1,
(PCITEMID_CHILD*)&pidl2, IID_IDataObject, 0, (LPVOID *)lpdataObj);
desk->Release();
return;
для бега:
shell:::{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}
1 ответ
Я предполагаю, что вам нужен только один из этих элементов в объекте данных в любой момент времени, в этом случае:
- Если у вас уже есть IShellItem, вы можете позвонить
IShellItem::BindToHandler(...,BHID_DataObject,...)
, - Если у вас есть только pidl, вы можете использовать SHCreateDataObject или CIDLData_CreateFromIDArray
Если вы хотите перетащить оба элемента в одной и той же операции, то все становится сложнее. Я не знаю, если оба этих объекта имеют одного и того же родителя. Если они это сделают, то даже старый CIDLData_CreateFromIDArray может справиться с этим. Если они этого не делают, вы можете попробовать SHCreateShellItemArrayFromIDLists и затем использовать IShellItemArray::BindToHandler(...,BHID_DataObject,...)
, Для поддержки
Перетаскивание изображений на самом деле не связано с этим и должно быть задано в отдельном вопросе, где вы включаете информацию о вашем IDragSourceHelper и т. Д.