zoukankan      html  css  js  c++  java
  • 调用windows api SHMultiFileProperties 显示多文件的汇总属性

    代码如下:
     1 // csFilePath 文件路径,以|分隔。 nPathes 路径数。
     2 void CGetDirectoryDlg::ShowPropertiesByPath(CString csFilePath,int nPathes)
     3 {
     4     if(csFilePath.IsEmpty())
     5     {
     6         return;
     7     }
     8     //单个文件属性
     9     if(nPathes == 1)
    10     {
    11         SHELLEXECUTEINFO sei;
    12         ZeroMemory(&sei,sizeof(sei));
    13         sei.cbSize = sizeof(SHELLEXECUTEINFO);
    14         sei.hwnd = m_hWnd;
    15         sei.lpParameters = NULL;
    16         sei.nShow = 0;
    17         sei.lpIDList =  NULL;
    18         sei.hInstApp = 0;
    19         sei.lpFile = csFilePath;//要显示属性的文件
    20         sei.lpVerb = L"properties";
    21         sei.fMask = SEE_MASK_IDLIST | SEE_MASK_NOCLOSEPROCESS | SEE_MASK_INVOKEIDLIST | 
    22 
    23 SEE_MASK_FLAG_NO_UI;
    24         ShellExecuteEx(&sei); 
    25         return;
    26     }
    27 
    28     //多个文件属性
    29     LPITEMIDLIST *pidlDrives = (LPITEMIDLIST *)malloc(sizeof(LPITEMIDLIST)*nPathes);
    30     IShellFolder* psfDesktop;
    31     IDataObject* pData;
    32     HRESULT hr;
    33     ULONG chEaten=0, dwAttributes=0;
    34     int i=0;
    35     hr = SHGetSpecialFolderLocation(NULL, CSIDL_DRIVES, pidlDrives);
    36     if (SUCCEEDED(hr))
    37     {
    38         hr = SHGetDesktopFolder(&psfDesktop);
    39         do{
    40             CString currentFilePath;
    41             int delimitatorPosition;
    42             delimitatorPosition = csFilePath.Find(L'|');
    43             if(delimitatorPosition == -1)
    44             {
    45                 delimitatorPosition = csFilePath.GetLength(); 
    46             }
    47             currentFilePath = csFilePath.Left(delimitatorPosition);
    48             csFilePath.Delete(0, delimitatorPosition + 1);
    49             psfDesktop->ParseDisplayName(NULL,
    50                 NULL,
    51                 currentFilePath.GetBuffer(),
    52                 &chEaten,
    53                 (LPITEMIDLIST*)&pidlDrives[i],
    54                 &dwAttributes);
    55             i++;
    56         }while(!csFilePath.IsEmpty() && i<nPathes);
    57 
    58         if (SUCCEEDED(hr))
    59         {
    60             hr = psfDesktop->GetUIObjectOf(NULL, 
    61                 nPathes, 
    62                 (LPCITEMIDLIST*)pidlDrives,
    63                 IID_IDataObject, 
    64                 NULL, 
    65                 (void**)&pData);
    66             if (SUCCEEDED(hr))
    67             {
    68                 CoInitialize(NULL);
    69                 hr = SHMultiFileProperties(pData,0);
    70                 if(SUCCEEDED(hr))
    71                 {
    72                     pData->Release();
    73                 }
    74                 CoUninitialize();
    75             }
    76             if(psfDesktop != NULL)
    77             {
    78                 psfDesktop->Release();
    79             }
    80         } 
    81         for(i=0;i<nPathes;i++)
    82         {
    83             ILFree(pidlDrives[i]);
    84         }
    85     }
    86 }
    87 

    88 //调用方法:ShowPropertiesByPath(L"D:\Share\v.txt|D:\Share\sh.txt", 2); 

  • 相关阅读:
    jdk环境一键配置
    IIS 浏览aspx页面出现 无法显示 XML 页
    ASP.NET MVC(三)
    ASP.NET MVC(二)
    ASP.NET MVC (一)
    Fatal error: Call to a member function bind_param() on a non-object in
    Eclipse字符集设置方式
    mysql 管理工具
    win7 IIS发布项目遇到的问题
    php 环境的搭建
  • 原文地址:https://www.cnblogs.com/freemindblog/p/5674550.html
Copyright © 2011-2022 走看看