…
LPMALLOC pMalloc;
LPITEMIDLIST pidlC = NULL;
LPITEMIDLIST pidlItems = NULL;
IShellFolder *psfDeskTop = NULL;
IShellFolder *psfFolderC = NULL;
LPENUMIDLIST ppenum = NULL;
ULONG celtFetched;
HRESULT hr;
STRRET strDispName;
TCHAR pszDisplayName[MAX_PATH];
ULONG uAttr;
hr = SHGetMalloc(&pMalloc);
hr = SHGetDesktopFolder(&psfDeskTop);
hr = psfDeskTop->ParseDisplayName(GetSafeHwnd(), NULL, L"C:\\", NULL, &pidlC, NULL);
hr = psfDeskTop->BindToObject(pidlC, NULL, IID_IShellFolder, (void**)&psfFolderC);
psfDeskTop->Release();
hr = psfFolderC->EnumObjects(GetSafeHwnd(), SHCONTF_FOLDERS | SHCONTF_NONFOLDERS , &ppenum);
while (hr = ppenum->Next(1, &pidlItems, &celtFetched) == S_OK && (celtFetched) == 1)
{
psfFolderC->GetDisplayNameOf(pidlItems, SHGDN_INFOLDER, &strDispName);
uAttr = SFGAO_FOLDER;
psfFolderC->GetAttributesOf(1, (LPCITEMIDLIST *) &pidlItems, &uAttr);
StrRetToBuf(&strDispName, pidlItems, pszDisplayName, MAX_PATH);
CString strDisplayName;
if(uAttr & SFGAO_FOLDER)
{
strDisplayName.Format("%s%s%s","[",pszDisplayName,"]");
}
else
{
strDisplayName = pszDisplayName;
}
m_listBox.SetItemData(m_listBox.InsertString(-1, strDisplayName), (DWORD)pidlItems);
}
ppenum->Release();
pMalloc->Free(pidlC);
pMalloc->Release();
m_psfFolderC = psfFolderC;
... |