シェル ツリー コントロールを作成しようとしています。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
}
}
OS 言語によって名前が変わる可能性があるため、各項目の表示名を取得して文字列比較を行いたくありません。
各アイテムの CLSID に基づいてフィルタリングを行うことはできますか? そして、それを行う最良の方法は何ですか?