vc++ windows 创建桌面快捷方式

创建桌面快捷方式

         在windows软件开发中,软件安装过程中总是需要在桌面创建快捷方式,下面介绍一种创建桌面快捷方式的方法,具体代码如下:

/*

* 创建快捷方式

* szExePath[in]:要创建快捷方式的exe文件全路径

* szLinkName[in]:要创建的快捷方式.link文件的全路径

* iIcon[in]:要创建快捷方式的exe文件RC资源中的icon值(默认为0)

*/

BOOL MainFrame::CreateOneLink (LPCTSTR  lpszExePath, LPCTSTR lpszLnkPath, int iIcon)

{

         ASSERT(lpszExePath != NULL);

 

         if (NULL == lpszExePath)

         {

                   return ERROR_INVALID_PARAMETER;

         }

 

         DWORD dwRlt = ERROR_SUCCESS;

         HRESULT hres = S_OK;

         IShellLink *pShellLink = NULL;

         IPersistFile *pPersistFile = NULL;

         WCHAR szwShortCutName[MAX_PATH];

         try

         {

                   ::CoInitialize(NULL); // 初始化 COM 库

 

                   // 创建 COM 对象并获取其实现的接口

                   hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&pShellLink);

                   if (FAILED(hres))

                   {

                            throw(hres);

                   }

 

                   TCHAR szWorkPath[MAX_PATH] = { 0 };

                   StringCchCopy(szWorkPath, MAX_PATH, lpszExePath);

                   LPTSTR pszEnd = _tcsrchr(szWorkPath, _T('\\'));

                   if (pszEnd != NULL)

                   {

                            *pszEnd = NULL;

                   }

 

                   // 设置快捷方式的各种属性

                   pShellLink->SetPath(lpszExePath); // 快捷方式所指的应用程序名

                   pShellLink->SetDescription(_T("描述")); // 描述

                   pShellLink->SetWorkingDirectory(szWorkPath); // 设置工作目录

                   pShellLink->SetIconLocation(lpszExePath, iIcon);//直接取exe文件中的图标进行设置

 

                   // 查询 IShellLink 接口从而得到 IPersistFile 接口来保存快捷方式

                   hres = pShellLink->QueryInterface(IID_IPersistFile, (void **)&pPersistFile);

                   if (FAILED(hres))

                   {

                            throw(hres);

                   }

 

                   StringCchPrintf(szwShortCutName, MAX_PATH, _T("%s"), lpszLnkPath);

                   //使用 IPersistFile 接口的 Save() 方法保存快捷方式

                   hres = pPersistFile->Save(szwShortCutName, TRUE);

 

         }

         catch (DWORD dwExpRlt)

         {

                   dwRlt = dwExpRlt;

         }

         catch (...)

         {

         }

 

         if (pPersistFile != NULL){

                   pPersistFile->Release(); pPersistFile = NULL;

         }

 

         if (pShellLink != NULL){

                   pShellLink->Release(); pPersistFile = NULL;

         }

 

         CoUninitialize();

 

         return dwRlt;

}

/*

* 设置桌面快捷方式

* szExePath[in]:要创建快捷方式的exe文件全路径

* szLinkName[in]:要创建的快捷方式的名字

* iIcon[in]:要创建快捷方式的exe文件RC资源中的icon值(默认为0)

*/

void MainFrame::CreateDesktopLink(LPCTSTR szExePath, LPCTSTR szLinkName, int iIcon)

{

         LPITEMIDLIST pidlBeginAt, pidlDestination;

         TCHAR szDesktopPath[MAX_PATH] = { 0 };

 

         LPITEMIDLIST  ppidl = NULL;

         //获取所有用户存放桌面快捷方式的路径

         HRESULT hSpecialPath = SHGetSpecialFolderLocation(NULL, CSIDL_COMMON_DESKTOPDIRECTORY, &ppidl);

         if (hSpecialPath == S_OK)

         {

                   BOOL flag = SHGetPathFromIDList(ppidl, szDesktopPath);

                   CoTaskMemFree(ppidl);

         }

         else

         {

                   //失败

                   return;

         }

         //设置快捷方式.link文件的全路径

         TCHAR szExeLinkFullPath[MAX_PATH] = { 0 };

         StringCchPrintf(szExeLinkFullPath, _countof(szExeLinkFullPath), _T("%s\\%s.lnk"), szDesktopPath, szLinkName);

         //开始创建快捷方式

         CreateOneLink (szExePath, szExeLinkFullPath,iIcon);

         // 通知shell有关变化

         SHChangeNotify(SHCNE_CREATE | SHCNE_INTERRUPT,

                   SHCNF_FLUSH | SHCNF_PATH,

                   szExeLinkFullPath, 0);

}

转载于:https://www.cnblogs.com/snowbook/p/5363438.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值