【发布时间】:2016-11-14 14:42:58
【问题描述】:
我有 Shell 文件夹,它是一个控制面板项。我正在尝试获取相同的 ITEMIDLIST。我有外壳文件夹 GUID。
按照文档进行
https://msdn.microsoft.com/en-us/library/windows/desktop/bb775090%28v=vs.85%29.aspx 和
https://msdn.microsoft.com/en-us/LIBRary/ms909875.aspx,不一致
并声明我可以从桌面文件夹中以 ::{GUID} 语法指定显示名称,我试过了
::{CLSID for Control Panel}\::{CLSID for my Shell folder}.
但这不起作用,因为我最终得到了控制面板的 ITEMIDLIST。如何将 ITEMIDLIST 获取到控制面板项?
根据@Denis Anisimov 建议的答案,我仍然面临 ParseDisplayName 的问题。
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
HRESULT hres;
LPSHELLFOLDER cPanel;
LPSHELLFOLDER DesktopFolder;
LPITEMIDLIST cpItemPidl;
LPITEMIDLIST pidl;
SHGetDesktopFolder(&DesktopFolder);
SHGetKnownFolderIDList(FOLDERID_ControlPanelFolder, CSIDL_CONTROLS, NULL, &pidl);
hres = DesktopFolder->BindToObject(pidl, NULL, IID_IShellFolder, (void**)&cPanel);
LPWSTR SFOLDERGUID = L"::{025A5937-A6BE-4686-A844-36FE4BEC8B6D}";
hres = cPanel->ParseDisplayName(NULL, NULL, SFOLDERGUID, NULL, &cpItemPidl, NULL);
}
我得到了
E_INVALIDARG One or more arguments are invalid.
【问题讨论】:
标签: c++ windows-shell shell-extensions