调用windows api SHMultiFileProperties 显示多文件的汇总属性

本文介绍了一种在Windows环境下批量展示文件属性的方法,通过解析分隔的文件路径,使用SHELLEXECUTEINFO结构和ShellExecuteEx函数实现单个文件属性展示;对于多个文件,则利用IShellFolder和IDataObject接口,结合SHGetSpecialFolderLocation和SHGetDesktopFolder函数获取文件的ITEMIDLIST,最终通过SHMultiFileProperties函数展示多个文件的属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码如下:
 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); 

转载于:https://www.cnblogs.com/freemindblog/p/5674550.html

C++本科毕业设计-ROS机械臂上位机源码(下载即用),个人经导师指导并认可通过的高分设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业、毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源
平差在测绘工程中具有极其重要的地位,其主要作用是处理测量数据中的误差,从而提升测量结果的精度。在“平差课程设计报告”中,学生田忠星以水准网为例,开展了间接平差的实践研究。间接平差的基本原理是通过构建观测方程,将观测值(如高程差)表示为待求参数(即未知点的高程)的函数,进而求解这些参数,以实现对测量误差的消除或减小。 在水准网间接平差程序设计方面,核心思路如下:首先,确定独立参数的数量,即未知点的高程数量;其次,将每个观测值(高程差)用选定的参数表示;接着,依据误差方程的系数矩阵和自由项构建法方程,法方程的数量与参数数量一致;然后,解法方程以求得参数(高程)的平差值;最后,利用误差方程计算观测值(高差)的平差值,并评估其精度。 程序运行流程主要包括以下步骤:首先,用户输入水准网的已知点数、未知点数以及观测值信息,如点号、高程和高差观测值等;接着,初步估算未知点的高程,基于已知点的高程和观测值进行近似计算;然后,根据观测值构建误差方程,包括系数矩阵、权矩阵和常数项;通过通用平差过程,解决由系数矩阵、权矩阵和常数项组成的线性系统,得到参数的平差值;最后,显示中间计算结果和最终平差结果,并支持数据保存功能。 程序界面采用菜单驱动方式,设有“文件”和“计算”两个主要菜单,支持数据的打开、保存和退出操作,同时具备近似高程计算、误差方程列立和平差计算等功能。界面中还包含文本框控件,用于显示输入、计算和输出信息,以及通用对话框用于文件操作。 在程序源代码中,定义了公共变量(如strFileName用于存储文件名)和其他变量,用于存储观测值、系数矩阵、权矩阵等信息。程序通过循环、条件判断等逻辑结构实现数据处理和计算。 这份“平差课程设计报告”全面记录了水准网间接平差的全过程,从理论阐述到实践操作,再到程序设计,完整展示了测量平差的基本原理和应用技术,对学习和理解测量误差处理具有重要的参考价值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值