创建桌面快捷方式

在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. hadoop13---centos安装jdk

    由于各Linux开发厂商的不同,因此不同开发厂商的Linux版本操作细节也不一样,今天就来说一下CentOS下JDK的安装: 方法一:手动解压JDK的压缩包,然后设置环境变量 1.在/usr/目录下创 ...

  2. sqlservr.exe占用大量内存

    SQL Server是如何使用内存 最大的开销一般是用于数据缓存,如果内存足够,它会把用过的数据和觉得你会用到的数据统统扔到内存中,直到内存不足的时候,才把命中率低的数据给清掉.所以一般我们在看sta ...

  3. node操作mongodb

    var mongodb = require('mongodb'); var server = new mongodb.Server('localhost', 27017, {auto_reconnec ...

  4. LVS管理工具--ipvsadm

    一. ipvsadm工具介绍 从2.4版本开始,linux内核默认支持LVS.要使用LVS的能力,只需安装一个LVS的管理工具:ipvsadm. LVS的结构主要分为两部分: 工作在内核空间的IPVS ...

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

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

  6. 关于ARM指令中位置无关和位置相关代码的认识【转】

    本文转载自:https://blog.csdn.net/talent_CYJ/article/details/50533153 今天在一个问题上折腾了又是半天.就是在学JZ2440串口通信的时候,在s ...

  7. ASP.NET的内置对象

    Request   该对象用于检索从浏览器向服务器所发送的请求中的信息.在按下“提交”按钮时,Request对象将读取和提取通过HTTP请求发送的参数.在用户提交表单时,包含在输入控件中的数据将与表单 ...

  8. MySQL explain 、explain extended用法

    explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上explain就可以了,如: explai ...

  9. 基于mysql数据库集群的360度水平切割

    1.why sharding? 我们都知道,信息行业发展日益迅速,积累下来的数据信息越来越多,互联网公司门要维护的数据日益庞大.设想一下,假如腾讯公司只用一个数据库的一张表格来存储所有qq注册用户的登 ...

  10. idea绿色版+谷歌浏览器绿色版——设置打开jsp文件

    首先我们的工具有 1.idea绿色版 2.Chrome绿色版 3.JavaJDK 4.Tomcat绿色版 文件放在那里都可以 1.idea设置默认打开Chrome 2.idea设置选择Tomcat和J ...