创建桌面快捷方式

在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);

}

vc++ windows 创建桌面快捷方式的更多相关文章

  1. windows创建桌面快捷方式的VBA脚本

    Dim wShell, oShortcut    'Dim strDesktop$ ' 为了与VBS兼容,    Dim strDesktop    ' 这里改写一下,测试通过...    Set w ...

  2. Windows中创建桌面快捷方式

    Windows中创建桌面快捷方式 -------------- -------------- -------------- --------------

  3. 手把手教你在ubuntu下创建桌面快捷方式

    习惯使用windows的朋友来说创建桌面快捷方式简直就是so easy, 鼠标右键点击文件-->选择发送桌面快捷方式.就OK了.对于ubuntu下该如何创建桌面快捷方式呢?以下以创建eclips ...

  4. winform创建桌面快捷方式

    //引用IWshRuntimeLibrary COM组件-Windows Script Host Object Model /// <summary> /// 创建快捷方式的类 /// & ...

  5. Ubuntu创建桌面快捷方式

    默认情况下,ubuntu会将自动安装的软件快捷方式保存在/usr/share/applications目录下,如果我们要创建桌面快捷方式,只需要右键-复制-桌面 就Ok,如图: 上面的方法是通过系统自 ...

  6. WPF 创建桌面快捷方式

    #region 创建桌面快捷方式 string deskTop = System.Environment.GetFolderPath(System.Environment.SpecialFolder. ...

  7. 解决Inno Setup制作安装包无法创建桌面快捷方式的问题

    转自:http://yedward.net/?id=104 昨天想把个java程序做成exe安装软件,然后就去下载了Inno Setup这个软件安装包制作软件,Inno Setup这个软件确实非常好用 ...

  8. C#创建桌面快捷方式 和 开机启动

              /// <summary>         /// 创建桌面快捷方式 2010-11-25         /// </summary>         p ...

  9. android 为应用程序创建桌面快捷方式技巧分享

    手机装的软件过多,找起来很不方便,所以在主页面有一个快捷方式的话会很不错的,本文将介绍如何实现,需要了解跟多的朋友可以参考下     我们开发一款软件后,如果手机装的软件过多,去翻的话会很难翻的,所以 ...

随机推荐

  1. 多种数据库之间 update的不同

    sql server update a set a.gqdltks=b.gqdltks,a.bztks=b.bztks from landleveldata a,gdqlpj b where a.GE ...

  2. 存储库之mongodb,redis,mysql

    一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性 ...

  3. PHP 错误日志/安全配置

    PHP 常用配置 /php/bin/php -i | head Loaded Configuration File => /php/etc/php.ini 查看php配置目录 vim /usr/ ...

  4. VRChat简易教程3-往世界里导入模型和VRC接口初探

    一.准备工作 按前面的教程新建一个project,导入sdk并创建地面(Terrain)和VRCWorld. 本教程中我们学习如何导入别人做好的模型并使用VRC提供的接口来实现物品的抓取,模型素材(小 ...

  5. java实验一报告

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java 班级: 1352    姓名:黄晓妍   学号:20135227 成绩:              指导教师:娄嘉 ...

  6. 安装配置zabbix代理之zabbix_proxy

    配置Proxy代理 如图所示: zabbix_server端在阿里云上,其代理程序部署在各地机房,代理程序收集所在机房的所有机器监控指标,然后传给server端 环境说明: CentOS releas ...

  7. mysql的binlog查看

    1.如果是在window下可以进入mysql的安装bin下,把从linux上拷贝出来的binlog进行查看,步骤如下 a.在mysql的安装bin下右键在此处打开命令行 b.执行命令 C:\Progr ...

  8. 并发-ThreadLocal源码分析

    ThreadLocal源码分析 参考: http://www.cnblogs.com/dolphin0520/p/3920407.html https://www.cnblogs.com/coshah ...

  9. 谷歌SEO老域名注册完全攻略

    老域名有优势,不管在百度和谷歌都是一样的. 我们查看搜索结果就能发现,谷歌里面很多排前十的网站都是N年前的,一零年以后的算是比较新的,很多产品网站域名是零几年,甚至很多排名更好的域名是九几年的. 谷歌 ...

  10. hibernate——第一次简单的使用

    提前有jdk.mysql.hibernate必须jar包.mysql连接jar包 mysql中的表 Java中的bean,User类 package com.xiaostudy.demo; publi ...