MFC创建快捷方式

来源:互联网 发布:js里的on是什么意思 编辑:程序博客网 时间:2024/05/29 03:35
//MyCommon.h#pragma onceenum ShortcutType{BOTH_SHORTCUT = 0,ONLY_DESKTOPSHORTCUT,ONLY_MENUSHORTCUT,NO_SHORTCUT};enum ExitType{EN_INITIALIZE_FAILED = -100,};


 

//MyWinInstall.h#pragma once#include "MyCommon.h"class CMyWinInstall{public:CMyWinInstall(void);virtual ~CMyWinInstall(void);public:int AddShortcut();void SetExePath(CString t_strPathName);void SetShortcutType(ShortcutType t_eShortcutType);private:void AddDesktopShortcut();void AddMenuShortcut();void GetLinkPath(char *&t_strPath);void SaveShortcut(char *&t_strPath, wchar_t *&t_pWSZ);void GetUniLinkName(char *&t_strPath, wchar_t *&t_pWSZ);int InitializeCOM();int UnInitializeCOM();private:ShortcutType m_eShortcutType;//快捷方式类型CString m_strFileName;//文件名CString m_strPathName;//可执行文件路径CString m_strLinkName;int m_iCSIDL;IShellLink *link;IPersistFile *file;};


 

//MyWinInstall.cpp#include "StdAfx.h"#include "MyWinInstall.h"CMyWinInstall::CMyWinInstall(void){m_eShortcutType = BOTH_SHORTCUT;}CMyWinInstall::~CMyWinInstall(void){}void CMyWinInstall::SetShortcutType(ShortcutType t_eShortcutType){m_eShortcutType = t_eShortcutType;}void CMyWinInstall::SetExePath(CString t_strPathName){m_strPathName = t_strPathName;int pos = m_strPathName.ReverseFind('\\');m_strFileName = m_strPathName.Right(m_strPathName.GetLength()-1-pos);//m_strPathName = "D:\\Program\\MyLibrary\\Debug\\MyWindowsTest.exe";}int CMyWinInstall::AddShortcut(){int t_iReturn = 0;t_iReturn = InitializeCOM();if(0 != t_iReturn){return t_iReturn;}char *t_pPath = new char[MAX_PATH];wchar_t *t_pWSZ = new wchar_t[MAX_PATH];memset(t_pPath, 0, MAX_PATH);memset(t_pWSZ, 0, MAX_PATH);switch(m_eShortcutType){case NO_SHORTCUT:break;case ONLY_DESKTOPSHORTCUT:{AddDesktopShortcut();GetUniLinkName(t_pPath, t_pWSZ);SaveShortcut(t_pPath, t_pWSZ);break;}case ONLY_MENUSHORTCUT:{AddMenuShortcut();GetUniLinkName(t_pPath, t_pWSZ);SaveShortcut(t_pPath, t_pWSZ);break;}default:{AddDesktopShortcut();GetUniLinkName(t_pPath, t_pWSZ);SaveShortcut(t_pPath, t_pWSZ);AddMenuShortcut();GetUniLinkName(t_pPath, t_pWSZ);SaveShortcut(t_pPath, t_pWSZ);break;}}delete t_pPath;UnInitializeCOM();return 0;}void CMyWinInstall::AddDesktopShortcut(){m_iCSIDL = CSIDL_DESKTOP;}void CMyWinInstall::AddMenuShortcut(){m_iCSIDL = CSIDL_PROGRAMS;}void CMyWinInstall::GetLinkPath(char *&t_strPath){LPITEMIDLIST pid;::SHGetSpecialFolderLocation(NULL, m_iCSIDL, &pid);::SHGetPathFromIDList(pid, t_strPath);}void CMyWinInstall::GetUniLinkName(char *&t_strPath, wchar_t *&t_pWSZ){CString name = "";int pos = m_strFileName.Find(".");name = m_strFileName.Left(pos);GetLinkPath(t_strPath);m_strLinkName.Format("%s\\%s.lnk", t_strPath, name);MultiByteToWideChar(CP_ACP, 0, m_strLinkName, -1, t_pWSZ, MAX_PATH);}void CMyWinInstall::SaveShortcut(char *&t_strPath, wchar_t *&t_pWSZ){file->Save(t_pWSZ, STGM_READWRITE);::SHChangeNotify(SHCNE_CREATE|SHCNE_INTERRUPT, SHCNF_FLUSH|SHCNF_PATH, m_strLinkName, 0);::SHChangeNotify(SHCNE_UPDATEDIR|SHCNE_INTERRUPT, SHCNF_FLUSH|SHCNF_PATH, t_strPath, 0);}int CMyWinInstall::InitializeCOM(){HRESULT res=::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&link);if(FAILED(res))        return EN_INITIALIZE_FAILED;link->SetPath(m_strPathName);res=link->QueryInterface(IID_IPersistFile,(void**)&file);if(FAILED(res))        return EN_INITIALIZE_FAILED;return 0;}int CMyWinInstall::UnInitializeCOM(){file->Release();link->Release();return 0;}


 

0 0
原创粉丝点击