资源简介
打开一个资源管理器并选中多个目标(文件、文件夹)。在国内网站搜索很久没有找到相关代码,后来在一个网站上找到了使用SHOpenFolderAndSelectitems函数来打开资源管理器,但是只能选中一个目标,因此在他的基础上测试并修改实现了所需功能。
代码片段和文件信息
// OpenFolderAndSelectItems.cpp: implementation of the COpenFolderAndSelectItems class.
//
//////////////////////////////////////////////////////////////////////
#include “stdafx.h“
#include “OpenFolderAndSelectItems.h“
#include
#include
#include
#pragma comment(lib“shlwapi“)
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
COpenFolderAndSelectItems::COpenFolderAndSelectItems()
{
}
COpenFolderAndSelectItems::~COpenFolderAndSelectItems()
{
}
BOOL COpenFolderAndSelectItems::IsPathExist(CString const& csPath)
{
CString cs(csPath);
BOOL bNoExist = access(cs.GetBuffer(cs.GetLength()) 0)==-1;//验证是否未存在的路径
cs.ReleaseBuffer();
return !bNoExist;
}
UINT COpenFolderAndSelectItems::CssToList(CString const& cstrTYPE_LIST_CSTR &strlistCString csSplit)
{
if (cstr.GetLength()>0)
{
int nStart = 0;
int nTemp = -1;
while (nStart>=0 && nStart {
nTemp = cstr.Find(csSplitnStart);
if (nTemp<0)
{
nTemp = cstr.GetLength();
}
if (nTemp>=nStart)
{
strlist.push_back(cstr.Mid(nStartnTemp-nStart));
}
nStart = nTemp+1;
}
}
return strlist.size();
}
UINT COpenFolderAndSelectItems::CsRemoveRepeat(CString &cstrSrcTCHAR tcSub)
{
int i = 0;
bool bStartFind = false;
for (i=cstrSrc.GetLength()-1;i>=0;i--)
{
if (cstrSrc.GetAt(i)==tcSub)
{
if (bStartFind)
{
cstrSrc.Delete(i);
}
bStartFind = true;
}
else
{
bStartFind = false;
}
}
return cstrSrc.GetLength();
}
// 打开文件夹并选中项目项目可能是文件也可能是文件夹
BOOL COpenFolderAndSelectItems::OpenAndSelect(CString const& csPath TYPE_LIST_CSTR const& listFileNames)
{
//路径转换csPath为空或不包含“:”代表以桌面为起始路径:
CString csPathEx(csPath);
if (csPath.FindOneOf(“:“)<0 || csPath.GetLength()==0)
{
TCHAR tcDesctop[255];
SHGetSpecialFolderPath(0tcDesctopCSIDL_DESKTOPDIRECTORY0);
csPathEx = tcDesctop;
csPathEx += “\\“ + csPath;
}
//将“/”换为“\”,因为PathCombine()函数只识别“..\而不识别“../”:
csPathEx.Replace(“/““\\“);
//删除多余的“\“否则会导致TSHOpenFolderAndSelectItems()函数崩溃:
CsRemoveRepeat(csPathEx‘\\‘);
//相对路径转换为绝对路径因为TSHOpenFolderAndSelectItems()不识别“..\”等符号:
if (csPathEx.FindOneOf(“..“))
{
char lpszDest[MAX_PATH] = {0};
PathCombine(lpszDestNULLcsPathEx);
csPathEx = lpszDest;
}
//判断路径是否存在,如果不存在会导致TSHOpenFolderAndSelectItems()函数崩溃:
if (!IsPathExist(csPathEx))
{
return FALSE;
}
//如果项目列表为空则直接打开csPath所在目录,否则TSHOpenFolderAndSelectItems()函数将打开上一级目录:
if (listFileNames.size()==0)
{
ShellExecute(NULL “open“ csPathEx NULL NULLSW_NORMAL);
return TRUE;
}
//打开路径:
BOOL bReturn = FALSE;
HRESULT hres = -1;
IShelllink *psl = NULL;
ITEMIDLIST *pidl = NULL;
CoIniti
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5083 2015-05-30 09:08 MyLibrary\OpenFolderAndSelectItems.cpp
文件 1744 2015-05-29 12:21 MyLibrary\OpenFolderAndSelectItems.h
文件 35716 2015-05-25 18:51 OpenFolder\OpenFolder.aps
文件 1262 2015-05-30 09:53 OpenFolder\OpenFolder.clw
文件 2115 2015-05-26 15:12 OpenFolder\OpenFolder.cpp
文件 4410 2015-05-30 10:03 OpenFolder\OpenFolder.dsp
文件 545 2015-05-25 15:27 OpenFolder\OpenFolder.dsw
文件 1366 2015-05-26 15:03 OpenFolder\OpenFolder.h
文件 91136 2015-05-30 10:05 OpenFolder\OpenFolder.ncb
文件 49664 2015-05-30 10:05 OpenFolder\OpenFolder.opt
文件 1819 2015-05-30 10:04 OpenFolder\OpenFolder.plg
文件 5444 2015-05-25 18:51 OpenFolder\OpenFolder.rc
文件 4838 2015-05-30 10:03 OpenFolder\OpenFolderDlg.cpp
文件 1401 2015-05-25 15:35 OpenFolder\OpenFolderDlg.h
文件 3651 2015-05-25 15:27 OpenFolder\ReadMe.txt
文件 1078 2015-05-25 15:27 OpenFolder\res\OpenFolder.ico
文件 402 2015-05-25 15:27 OpenFolder\res\OpenFolder.rc2
文件 780 2015-05-25 15:30 OpenFolder\resource.h
文件 212 2015-05-25 15:27 OpenFolder\StdAfx.cpp
文件 1054 2015-05-25 15:27 OpenFolder\StdAfx.h
文件 24576 2015-05-30 10:04 OpenFolder.exe
目录 0 2015-05-30 10:03 OpenFolder\Debug
目录 0 2015-05-30 10:05 OpenFolder\Release
目录 0 2015-05-30 10:01 OpenFolder\res
目录 0 2015-05-30 10:01 MyLibrary
目录 0 2015-05-30 10:05 OpenFolder
----------- --------- ---------- ----- ----
238296 26
- 上一篇:RevolutionSlider汉化包
- 下一篇:libiconv.so
相关资源
- QFTP类实现FTP上传、、删除文件及文件
- 简易计算器2014版 v1.0 文件夹.rar
- 老版包含windows文件夹的caffe-windows库
- 应用于NAO开发,内含6个可执行代码,
- httpClient 调用远程接口 获取数据到本
- 文件夹.EXE病毒专杀工具.rar
- 如何使用eclipse打开已有工程
- 多文件夹下编写Makefile
- 禁止win10文件夹自动排列.bat
- Qt文件或文件夹拷贝
- Unity打开安卓相册工程(Unity2019.2.8f
- webview支持type=\“file\“ 打开相机和相
- glut工具包,解决编译问题: 无法打
- 文件夹批量改名
-
遍历文件文件夹及导出xm
l - LabVIEW建立树形结构,动态管理文件夹
- QT5 打开一个浏览器和对应的网页
- Eclipse打开Keil工程图解教程
- 定时打开指定程序的小工具
- 实时监控目录文件夹的更新状态,与
- 文件浏览 打开sdcard文件夹。只显示文
- windows7 10 取消文件自动排序reg文件,
- Sentinel-2 Sen2Cor 大气校正步骤以及在
- Opencv打开电脑自带USB摄像头并调用模
- 全国气象站点点位数据带坐标,exce
- saber仿真软件,仿真失败,仿真错误及
- fastreport 4报表编辑器,双击可直接打
- 批处理修改个人文件夹
- office03 office07 office10版共存解决办法
- 可以批量修改文件夹及文件夹下所有
评论
共有 条评论