gpt4 book ai didi

c++ - 如何筛选 IShellFolder::EnumObjects 结果

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:22 31 4
gpt4 key购买 nike

我正在尝试创建一个 shell 树控件。我不希望从 IShellFilder::EnumObjects 调用返回的所有项目都显示在树上,因为我需要过滤回收站和控制面板等项目。

我的代码是这样的:

IShellFolder* pDesktopFolder=NULL;
SHGetDesktopFolder(&pDesktopFolder);


LPITEMIDLIST pidlParent=NULL;
IShellFolder* pParentFolder = NULL;
pDesktopFolder->BindToObject(pidlParent,NULL, IID_IShellFolder, (LPVOID*)&pParentFolder);

IEnumIDList* pEnumIDList = NULL;
SHCONTF SHFlag=NULL;
SHFlag=SHCONTF_FOLDERS | SHCONTF_INIT_ON_FIRST_NEXT | SHCONTF_NONFOLDERS | SHCONTF_INCLUDEHIDDEN;

HRESULT hr= pParentFolder->EnumObjects(NULL, SHFlag, &pEnumIDList);

if (NOERROR == hr)
{
LPITEMIDLIST pidl = NULL, pidlAbs;
CString csFileType;
HTREEITEM hItem=NULL;
while (NOERROR == pEnumIDList->Next(1, &pidl, NULL))
{
//Filter out control panel, recycle bin items and other non usable items
}
}

我不想获取每个项目的显示名称并对其进行字符串比较,因为名称会根据操作系统语言而改变。

可以根据每个item的CLSID来过滤吗?最好的方法是什么?

最佳答案

当您有一个 IShellFolder 和一个子 pidl 时,您可以使用 SHGetDataFromIDList(...,SHGDFIL_DESCRIPTIONID)获取 pidl 目标的 CLSID。

另见:

关于c++ - 如何筛选 IShellFolder::EnumObjects 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10966881/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com