资源简介

打开一个资源管理器并选中多个目标(文件、文件夹)。在国内网站搜索很久没有找到相关代码,后来在一个网站上找到了使用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


评论

共有 条评论