用Shell获取windows文件的详细信息
2012-10-11 14:59
507 查看
static bool GetInfoFromWindows(wchar_t* szFilePath) { IShellFolder * psfDesktop = NULL;//用来定位某个文件夹,并对此文件夹下的文件和文件夹进行操作 IShellFolder2* psf2Desktop = NULL;//从IShellFolder借口继承,提供了一些新的功能(即扩展属性,如作者)。 //Shell的基础是桌面,桌面可看做任何文件夹的父类 if(NOERROR != SHGetDesktopFolder(&psfDesktop)) return false; psfDesktop->QueryInterface(IID_IShellFolder2,(void**)&psf2Desktop); psfDesktop->Release(); LPITEMIDLIST pTargetPathID;//ITEMIDLIST,每个文件或文件夹都维护自己的ItemIDList,里面记录了它们的所有属性。 //一个文件夹下的文件会形成有序的链表,即EnumIDList,对这个链表进行遍历即可找到所有的文件信息。 IShellFolder2* psf2Folder = NULL; //定位到文件所在文件夹 int iFolderLength = _tcsrchr(szFilePath,_T('\\')) != NULL ? _tcsrchr(szFilePath,_T('\\')) - szFilePath : -1; if(iFolderLength <= 0) return false; wchar_t szFolder[128] = _T(""); _tcsncpy(szFolder,szFilePath,iFolderLength); if(S_OK != psfDesktop->ParseDisplayName(NULL,NULL,szFolder,NULL,&pTargetPathID,NULL)) return false; HRESULT hr2; if(S_OK != (hr2 = psf2Desktop->BindToObject(pTargetPathID,NULL,IID_IShellFolder2,(void**)&psf2Folder))) return false; /*LPCITEMIDLIST pidlRelative = NULL; if(S_OK == SHGetFolderLocation (NULL, CSIDL_MYMUSIC,NULL,NULL, &pTargetPathID)) { if(S_OK != SHBindToParent(pTargetPathID,IID_IShellFolder,(void**)&psf2Folder,&pidlRelative)) return false; }*/ // if ((SUCCEEDED (SHGetDesktopFolder(&pDesktop))) && // (SUCCEEDED (SHGetSpecialFolderLocation (m_hWnd, CSIDL_BITBUCKET, &pidlRecycleBin)))) // { // if (SUCCEEDED (pDesktop->BindToObject(pidlRecycleBin, NULL, IID_IShellFolder2, (LPVOID *)&m_pFolder2))) // { // // } // } LPENUMIDLIST pEnum; if(S_OK != psf2Folder->EnumObjects(NULL,SHCONTF_NONFOLDERS,&pEnum)) return false; STRRET retFile; wchar_t szFilename[128] = _T(""); LPITEMIDLIST pFileItemID; ULONG uEleFetched = 0; while(pEnum->Next(1,&pFileItemID,&uEleFetched) == S_OK) { ZeroMemory(szFilename,128); //按照完成文件名格式获得文件名 psf2Folder->GetDisplayNameOf(pFileItemID,SHGDN_FORPARSING,&retFile); StrRetToBuf(&retFile,pFileItemID,szFilename,128); if(0 == _tcsicmp(szFilename,szFilePath)) break; } //get title,column 21 //::CoInitialize(NULL); SHELLDETAILS shDetail; wprintf(L"中文\n"); for(int i=0;i<10000;++i) { HRESULT hr = psf2Folder->GetDetailsOf(pFileItemID,i,&shDetail); if(hr == S_OK) { wchar_t szContent[128]; ZeroMemory(szContent,128); StrRetToBuf(&(shDetail.str),pFileItemID,szContent,128); _tprintf(_T("xxxx %d : %ls\n"), i,szContent); } } //CoUninitialize(); return true; }
相关文章推荐
- 使用ShellClass获取文件属性详细信息
- 使用ShellClass获取文件属性详细信息的实现方法
- 使用ShellClass获取文件属性详细信息
- 如何在windows下和linux下获取文件(如exe文件)的详细信息和属性
- 获取dataview显示的文件的详细信息
- Windows内核开发中如何区分文件对象究竟是文件还是文件夹?(FILE_OBJECT包括了无数详细信息)
- 获取windows可执行文件的version信息(版本号)
- C#获取文件详细备注信息
- 【转】windows c++获取文件信息——_stat函数的使用
- Openwrt系统中shell脚本获取配置文件信息解读
- 2_Windows下利用批处理文件获取命令行命令帮助信息
- 实现获取详细信息及文件下载功能
- 使用WindowsShell获取文件缩略图
- linux stat函数(获取文件详细信息)
- 利用stat命令获取Linux文件系统和文件的详细状态信息
- windows下获取某个目录下的所有文件信息
- 让windows文件全部默认以“详细信息”显示
- Linux stat函数讲解(获取文件详细信息)
- 内核态获取文件详细信息
- 3、用shell遍历文件的每一行,和获取指定行的信息。