MFC创建快捷方式
2014-01-27 14:23
225 查看
//MyCommon.h #pragma once enum 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; }
相关文章推荐
- VC MFC 创建桌面快捷方式
- MFC 创建快捷方式的两种方法
- MFC怎样创建快捷方式?
- 【框架-MFC】C++ 创建快捷方式
- MFC 创建快捷方式
- MFC创建快捷方式
- 如何用MFC创建快捷方式
- 如何用MFC创建快捷方式
- MFC 创建快捷方式(学习笔记)
- MFC创建桌面快捷方式
- MFC 创建快捷方式(学习笔记)
- MFC创建桌面快捷方式
- Android中快捷方式的创建和删除(ShortCut)
- 用masm32创建快捷方式--使用com的演示程序
- 编程(C#)实现创建 internet快捷方式 文件
- 用js文件创建一个带参数的view client的快捷方式(类似的bat形式也可模仿实现),并实现自动登录
- 【Ubuntu】Ubuntu创建桌面快捷方式
- 批处理文件创建快捷方式
- 为新建文本文件创建快捷方式
- 创建和删除快捷方式以及判断是否有快捷方式