用vc2003实现类似快捷方式的查找目标,qq、飞球的所在文件夹,迅雷的浏览文件功能
PS:从其他地方粘的,不足之处,多多指教
调用处
CString strPath ;
m_sFileFolderPath =fileDlg.GetPathName();
OpenFolderAndSelectItems(m_sFileFolderPath) ;
实现代码:
BOOL OpenFolderAndSelectItems(CString strPath)
{
CoInitialize(NULL) ;
//转换字符串为unicode字符串
OLECHAR olepath[MAX_PATH];
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, strPath, -1, olepath, MAX_PATH);
LPITEMIDLIST pidl ;
LPSHELLFOLDER desk ;
HRESULT hr = ::SHGetDesktopFolder(&desk);
if (SUCCEEDED(hr))
{
//转换文件对象或文件夹得到项目识别符列表
hr = desk->ParseDisplayName(NULL, NULL, olepath, NULL, &pidl, NULL);
if (SUCCEEDED(hr))
{
hr = ::SHOpenFolderAndSelectItems((LPCITEMIDLIST)pidl, 0, NULL, 0) ;
}
}
//接收IMalloc接口的指针,
//该接口必须用来释放由shell分配的将被shell来释放的内存
//应用程序可以使用该接口分配和释放自己的内存
LPMALLOC pmalloc;
::SHGetMalloc(&pmalloc);
pmalloc->Free((void *)pidl);
pmalloc->Release();
desk->Release() ;
CoUninitialize();
return SUCCEEDED(hr) ;
}