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);
}
vc++ windows 创建桌面快捷方式的更多相关文章
- windows创建桌面快捷方式的VBA脚本
Dim wShell, oShortcut 'Dim strDesktop$ ' 为了与VBS兼容, Dim strDesktop ' 这里改写一下,测试通过... Set w ...
- Windows中创建桌面快捷方式
Windows中创建桌面快捷方式 -------------- -------------- -------------- --------------
- 手把手教你在ubuntu下创建桌面快捷方式
习惯使用windows的朋友来说创建桌面快捷方式简直就是so easy, 鼠标右键点击文件-->选择发送桌面快捷方式.就OK了.对于ubuntu下该如何创建桌面快捷方式呢?以下以创建eclips ...
- winform创建桌面快捷方式
//引用IWshRuntimeLibrary COM组件-Windows Script Host Object Model /// <summary> /// 创建快捷方式的类 /// & ...
- Ubuntu创建桌面快捷方式
默认情况下,ubuntu会将自动安装的软件快捷方式保存在/usr/share/applications目录下,如果我们要创建桌面快捷方式,只需要右键-复制-桌面 就Ok,如图: 上面的方法是通过系统自 ...
- WPF 创建桌面快捷方式
#region 创建桌面快捷方式 string deskTop = System.Environment.GetFolderPath(System.Environment.SpecialFolder. ...
- 解决Inno Setup制作安装包无法创建桌面快捷方式的问题
转自:http://yedward.net/?id=104 昨天想把个java程序做成exe安装软件,然后就去下载了Inno Setup这个软件安装包制作软件,Inno Setup这个软件确实非常好用 ...
- C#创建桌面快捷方式 和 开机启动
/// <summary> /// 创建桌面快捷方式 2010-11-25 /// </summary> p ...
- android 为应用程序创建桌面快捷方式技巧分享
手机装的软件过多,找起来很不方便,所以在主页面有一个快捷方式的话会很不错的,本文将介绍如何实现,需要了解跟多的朋友可以参考下 我们开发一款软件后,如果手机装的软件过多,去翻的话会很难翻的,所以 ...
随机推荐
- 多种数据库之间 update的不同
sql server update a set a.gqdltks=b.gqdltks,a.bztks=b.bztks from landleveldata a,gdqlpj b where a.GE ...
- 存储库之mongodb,redis,mysql
一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性 ...
- PHP 错误日志/安全配置
PHP 常用配置 /php/bin/php -i | head Loaded Configuration File => /php/etc/php.ini 查看php配置目录 vim /usr/ ...
- VRChat简易教程3-往世界里导入模型和VRC接口初探
一.准备工作 按前面的教程新建一个project,导入sdk并创建地面(Terrain)和VRCWorld. 本教程中我们学习如何导入别人做好的模型并使用VRC提供的接口来实现物品的抓取,模型素材(小 ...
- java实验一报告
北京电子科技学院(BESTI) 实 验 报 告 课程:Java 班级: 1352 姓名:黄晓妍 学号:20135227 成绩: 指导教师:娄嘉 ...
- 安装配置zabbix代理之zabbix_proxy
配置Proxy代理 如图所示: zabbix_server端在阿里云上,其代理程序部署在各地机房,代理程序收集所在机房的所有机器监控指标,然后传给server端 环境说明: CentOS releas ...
- mysql的binlog查看
1.如果是在window下可以进入mysql的安装bin下,把从linux上拷贝出来的binlog进行查看,步骤如下 a.在mysql的安装bin下右键在此处打开命令行 b.执行命令 C:\Progr ...
- 并发-ThreadLocal源码分析
ThreadLocal源码分析 参考: http://www.cnblogs.com/dolphin0520/p/3920407.html https://www.cnblogs.com/coshah ...
- 谷歌SEO老域名注册完全攻略
老域名有优势,不管在百度和谷歌都是一样的. 我们查看搜索结果就能发现,谷歌里面很多排前十的网站都是N年前的,一零年以后的算是比较新的,很多产品网站域名是零几年,甚至很多排名更好的域名是九几年的. 谷歌 ...
- hibernate——第一次简单的使用
提前有jdk.mysql.hibernate必须jar包.mysql连接jar包 mysql中的表 Java中的bean,User类 package com.xiaostudy.demo; publi ...