如何过滤 IShellFolder::EnumObjects 结果 [英] How to Filter IShellFolder::EnumObjects result

查看:19
本文介绍了如何过滤 IShellFolder::EnumObjects 结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to create a shell tree control. I do not want all the items that return from IShellFilder::EnumObjects call to display on the tree as I need to filter items such as the Recycle Bin and the Control Panel for example.

我的代码如下所示:

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
     }
}

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

I don't want to get the display name of each item and do a string comparison on that since names can change depending on the OS language.

是否可以根据每个项目的 CLSID 进行过滤?最好的方法是什么?

Can the filtering be done based on the CLSID of each item? And whats the best way of doing it?

推荐答案

已解决:

我做到了这一点并且它正在工作,但我需要看看在哪里可以获得其他文件夹的 GUID 列表:

I did this and its working, yet I need to see where can I get a list of GUIDs for other folders:

ULONG nEaten=0;
    LPITEMIDLIST PidlCPanel;
    ULONG nCPAttrib = 0;
    HRESULT hr = pFolder->ParseDisplayName(NULL, NULL, _T("::{26EE0668-A00A-44D7-9371-BEB064C98683}"), &nEaten, &PidlCPanel, &nCPAttrib);
    BOOL bRes = ILIsEqual(pidl, PidlCPanel);

这篇关于如何过滤 IShellFolder::EnumObjects 结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆