我建立了一种船坞,我在寻找如何保存的东西,如“运行”,“搜索”,“帮助”,“打印机”,之后重新打开他们绞尽脑汁。

我尝试这样:

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。我错过了什么?

有帮助吗?

解决方案

我找到了解决办法。我必须创建一个快捷菜单,然后QueryContextMenu填补它,得到与GetDefaultMenuItem(默认项),并与InvokeCommand调用它。

有必要从。减去默认菜单项给出QueryContextMenu的第一个项目的索引,否则你就会有一个偏移量。

这是非常有益的: HTTP://博客。 msdn.com/oldnewthing/archive/2004/09/30/236133.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top