셸 트리 컨트롤을 만들려고합니다. IShellFilder::EnumObjects
에서 반환되는 모든 항목이 휴지통 및 제어판과 같은 항목을 필터링해야 할 때 트리에 표시되도록 호출하는 것을 원하지 않습니다.IShellFolder :: 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를 기준으로 필터링을 수행 할 수 있습니까? 그리고 그것을하는 가장 좋은 방법은 무엇입니까?
그런 시스템 폴더 GUID를 사용하면 안됩니다. 'SHGetFolderLocation()'및/또는'SHGetKnownFolderIDList()'함수를 사용하여 휴지통 ('CSIDL_BITBUCKET' /'FOLDERID_RecycleBinFolder')과 제어판 ('CSIDL_CONTROLS' /'FOLDERID_ControlPanelFolder')을 포함한 시스템 폴더에 대한 ITEMIDLIST를 얻으십시오.). –
내 코드 컨텍스트에서 이들을 사용하는 방법에 대한 답변을 게시 할 수 있습니다 –
또한 SHGetKnownFolderIDList는 XP에서 사용할 수 없다는 점을 유의하십시오. –