Я строю своего рода док, и я изо всех сил пытаюсь найти, как сохранить такие вещи, как «Запустить», «Поиск», «Справка», «Принтеры» и снова открыть их.Как выполнить/ShellExecuteEx/InvokeCommand ITEMIDLIST, указывающий на объекты Shell?
Я попытался это:
CComPtr<IShellFolder> pDF;
SHGetDesktopFolder(&pDF);
LPITEMIDLIST pidlPrintersAndFaxes=0;
hr=pDF->ParseDisplayName(0, 0, L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{2227A280-3AEA-1069-A2DE-08002B30309D}", 0, &pidlPrintersAndFaxes, NULL);
CComPtr<IShellFolder> pSF;
hr=pDF->BindToObject(pidlPrintersAndFaxes, 0, IID_IShellFolder, (void**)&pSF);
LPITEMIDLIST pidlPrinter=0;
hr=pSF->ParseDisplayName(0, 0, L"PDFCreator", 0, &pidlPrinter, NULL);
CComPtr<IContextMenu> pPrinterCtxMenu;
hr=pSF->GetUIObjectOf(0, 1, (LPCITEMIDLIST*)&pidlPrinter, IID_IContextMenu, 0, (void**)&pPrinterCtxMenu);
CMINVOKECOMMANDINFO cmd={0};
cmd.cbSize=sizeof(CMINVOKECOMMANDINFO);
cmd.lpVerb=MAKEINTRESOURCE(0);
cmd.nShow=SW_SHOWNORMAL;
hr=pPrinterCtxMenu->InvokeCommand(&cmd);
Все, что я пытаюсь InvokeCommand на последней строке всегда возвращают E_INVALIDARG. Я попробовал его с ShellExecuteEx и получил ту же ошибку.
Я пробовал все возможные глаголы.
Я попытался перечислить глаголы и получил E_INVALIDARG.
Я не могу заставить его работать, но на обычном пути файловой системы, например, «c: \» и clsid в папках. Что я упустил ?