用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) ;
}
本文介绍如何使用VC2003实现打开特定文件夹并自动选中其中的文件功能,通过解析文件路径并利用Shell API进行操作。
162

被折叠的 条评论
为什么被折叠?



