⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filepro.cpp

📁 这是我仿照串口助手(龚建伟)作的一个例子并修正了其中的一些bug
💻 CPP
字号:
// FilePro.cpp: implementation of the CFilePro class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "FilePro.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CFilePro::CFilePro()
{

}

CFilePro::~CFilePro()
{

}
/////follow is functon
bool CFilePro::CreateShortCut(LPCTSTR shortCutPath,LPCTSTR fileName )
{
	TCHAR szPath[MAX_PATH];
	TCHAR szFileName[MAX_PATH];
	ZeroMemory(szPath,MAX_PATH);
	ZeroMemory(szFileName,MAX_PATH);
	if(shortCutPath==NULL) return false;
	if(fileName ==NULL )
	{
		::GetModuleFileName(NULL,szFileName,MAX_PATH);
	}
	else
	{
#ifndef UNICODE 
		memcpy(szFileName,fileName,strlen(fileName));
#else
		memcpy(szFileName,fileName,wcslen(fileName)*sizeof(TCHAR));
#endif
	}
	
#ifndef UNICODE 
		memcpy(szPath,shortCutPath,strlen(shortCutPath));
#else
		memcpy(szPath,shortCutPath,wcslen(shortCutPath)*sizeof(TCHAR));
#endif
	TCHAR *p = szFileName;
	for(int i = lstrlen(szFileName);i>0;i--)
	{
		if(*(p+i)==_T('\\'))
			break;
	}
	p = szFileName+i;
	//形成完整的快捷方式数据文件名	
	wsprintf(szPath+lstrlen(szPath),_T("\\%s.lnk"),p);
	
	CreateLink(szFileName,szPath);
	return true;
}

///浏览文件夹
BOOL CFilePro::BrowseForFolder(HWND hwnd,
    LPITEMIDLIST pidlRoot,//浏览开始处的PIDL
	LPITEMIDLIST *ppidlDestination,//浏览结束时所选择的PIDL	
    LPCTSTR lpszTitle)//浏览对话框中的提示文字
{    
	BROWSEINFO BrInfo ;
    ZeroMemory( &BrInfo, sizeof(BrInfo)) ;
    BrInfo.hwndOwner = hwnd ;
	BrInfo.pidlRoot = pidlRoot ;
    BrInfo.lpszTitle = lpszTitle ;
	BrInfo.ulFlags=BIF_RETURNONLYFSDIRS|BIF_EDITBOX|BIF_DONTGOBELOWDOMAIN ;
	BrInfo.lpfn=0;
	BrInfo.lParam=0;
	BrInfo.iImage=0;
    //浏览文件夹
	*ppidlDestination= SHBrowseForFolder(&BrInfo);
    if(*ppidlDestination==NULL)
	{
		return false;
	}
	return TRUE;
}

BOOL CFilePro::BrowseForFolder(
	HWND hwnd,
    LPITEMIDLIST pidlRoot,//浏览开始处的PIDL
	LPTSTR szPath,
    LPCTSTR lpszTitle)//浏览对话框中的提示文字
{
	LPITEMIDLIST pidlDestination;
	BROWSEINFO BrInfo ;
    ZeroMemory( &BrInfo, sizeof(BrInfo)) ;
    BrInfo.hwndOwner = hwnd ;
	BrInfo.pidlRoot = pidlRoot ;
    BrInfo.lpszTitle = lpszTitle ;
	BrInfo.ulFlags=BIF_RETURNONLYFSDIRS|BIF_EDITBOX|BIF_DONTGOBELOWDOMAIN ;
	BrInfo.lpfn=0;
	BrInfo.lParam=0;
	BrInfo.iImage=0;
    //浏览文件夹
	pidlDestination= SHBrowseForFolder(&BrInfo);
    if(pidlDestination==NULL)
	{
		return false;
	}
	// 把PIDL转换为路径名
	if(!SHGetPathFromIDList(pidlDestination, szPath))
	{
		ReleasePIDL(&pidlDestination);
		return false;
	}

	ReleasePIDL(&pidlDestination);
	return TRUE;
}

// 创建快捷方式
BOOL CFilePro::CreateLink(	LPCTSTR szPath,//快捷方式的目标应用程序
	LPCTSTR szLink)//快捷方式的数据文件名(*、lnk)
{
	HRESULT hres;	
	IShellLink *psl;	
	IPersistFile *ppf;
	//创建一个ISellLink实例	
	hres=CoCreateInstance(CLSID_ShellLink,NULL,CLSCTX_INPROC_SERVER,		
								IID_IShellLink,(void**)&psl);
	if(FAILED(hres))	return FALSE;	
	//设置快捷键(此处设为Shift+Ctrl+R)	
	psl->SetHotkey(MAKEWORD('R',HOTKEYF_SHIFT|HOTKEYF_CONTROL));
	//从IShellLink获取其IPersistFile接口
	hres=psl->QueryInterface(IID_IPersistFile,(void**)&ppf);

	if(FAILED(hres))return FALSE;
	//调用IPersistFile::Save
	psl->SetPath(szPath);
	//保存快捷方式的数据文件(*.lnk)	
#ifndef UNICODE	
	WCHAR wsz[MAX_PATH];
	MultiByteToWideChar(CP_ACP,0,szLink,-1,wsz,	MAX_PATH);
	hres=ppf->Save(wsz,STGM_READWRITE);	
#else
	hres=ppf->Save(szLink,STGM_READWRITE);	
#endif
	//释放IPersistFile和IShellLink接口
	ppf->Release();	
	psl->Release();	
	return TRUE;
}

bool CFilePro::CreateShortCutStartMenu(LPCTSTR fileName)
{
	TCHAR szFileName[MAX_PATH];
	TCHAR szPath[MAX_PATH];
	ZeroMemory(szPath,MAX_PATH);
	ZeroMemory(szFileName,MAX_PATH);
	if(fileName==NULL) 
	{
		::GetModuleFileName(NULL,szFileName,MAX_PATH);
	}
	else
	{
#ifndef UNICODE 
		memcpy(szFileName,fileName,strlen(fileName));
#else
		memcpy(szFileName,fileName,wcslen(fileName)*sizeof(TCHAR));
#endif
	}
	LPITEMIDLIST  pidlBeginAt ;
    // 取得开始菜单或桌面的PIDL
    if(NOERROR !=SHGetSpecialFolderLocation( HWND_DESKTOP, 
            CSIDL_COMMON_DESKTOPDIRECTORY , &pidlBeginAt) )
	{
		ReleasePIDL(&pidlBeginAt);
		return false;
	}
	
	if(!SHGetPathFromIDList(pidlBeginAt, szPath))
	{
		ReleasePIDL(&pidlBeginAt);
		return false;
	}
	if(!CreateShortCut(szPath,szFileName )) return false;
	return true;
}
	

bool CFilePro::CreateShortCutDesktop(LPCTSTR fileName)
{
	TCHAR szFileName[MAX_PATH];
	TCHAR szPath[MAX_PATH];
	ZeroMemory(szPath,MAX_PATH);
	ZeroMemory(szFileName,MAX_PATH);
	if(fileName==NULL) 
	{
		::GetModuleFileName(NULL,szFileName,MAX_PATH);
	}
	else
	{
#ifndef UNICODE 
		memcpy(szFileName,fileName,strlen(fileName));
#else
		memcpy(szFileName,fileName,wcslen(fileName)*sizeof(TCHAR));
#endif
	}
	LPITEMIDLIST  pidlBeginAt ;
    // 取得开始菜单或桌面的PIDL
    if(NOERROR !=SHGetSpecialFolderLocation( HWND_DESKTOP, 
            CSIDL_COMMON_DESKTOPDIRECTORY , &pidlBeginAt) )
	{
		ReleasePIDL(&pidlBeginAt);
		return false;
	}
	
	if(!SHGetPathFromIDList(pidlBeginAt, szPath))
	{
		ReleasePIDL(&pidlBeginAt);
		return false;
	}

	ReleasePIDL(&pidlBeginAt);
	if(!CreateShortCut(szPath,szFileName )) return false;
	return true;
}


bool CFilePro::ReleasePIDL(LPITEMIDLIST *ppidl)
{
	LPMALLOC pMalloc;
	//Retrieve a pointer to the shell's IMalloc interface
	if (SUCCEEDED(SHGetMalloc(&pMalloc)))
	{
		pMalloc->Free(*ppidl);
		(void)pMalloc->Release();
		return true;
	}
	return false;
}


bool CFilePro::CreateFolder(LPCTSTR sPath,LPCTSTR sFoldName)
{
	
	return false;
}

bool CFilePro::CreateFolder(LPCTSTR sPath)
{
/*	if(!PathIsDirectory(sPath))
	{
		MessageBox(NULL,_T("无效的路径名"),_T("error"),MB_OK);
		return false;
	}*/
	if(CreateDirectory(sPath,NULL))
		return true;
	return false;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -