VC编程在指定目录生成快捷方式
小标 2018-08-14 来源 : 阅读 2105 评论 0

摘要:本文主要向大家介绍了VC编程在指定目录生成快捷方式,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

本文主要向大家介绍了VC编程在指定目录生成快捷方式,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

一、首先要获得不同目录的路径

char chDesktopPath[MAX_PATH] = {0};SHGetSpecialFolderPathA(NULL,chDesktopPath,CSIDL_DESKTOP,0);//获取当前用户桌面路径


通过改变上面函数的第三个参数来获取

第三个参数可以为:

CSIDL_BITBUCKET, CSIDL_CONTROLS, CSIDL_DESKTOP, CSIDL_DESKTOPDIRECTORY,

CSIDL_DRIVES, CSIDL_FONTS, CSIDL_NETHOOD, CSIDL_NETWORK, CSIDL_PERSONAL,

CSIDL_PRINTERS, CSIDL_PROGRAMS, CSIDL_RECENT, CSIDL_SENDTO, CSIDL_STARTMENU,

CSIDL_STARTUP, CSIDL_TEMPLATES

二、获取到路径之后,就可以在对应的路径下生成快捷方式

下面函数的解析:


BOOL CreateFileShortcut(LPCTSTR lpszFileName, LPCTSTR lpszLnkFileDir, LPCTSTR lpszLnkFileName, LPCTSTR lpszWorkDir, WORD wHotkey, LPCTSTR lpszDescription, int iShowCmd = SW_SHOWNORMAL)


lpszFileName:指定生成快捷方式的文件,如果为NULL则是当前进程的快捷方式

lpszLnkFileDir:指定快捷方式生成的牡蛎,不能为NULL

lpszLnkFileName:快捷方式的名称,后缀名为.lnk,不能为NULL

lpszWorkDir:工作目录,一般设置为NULL

wHotkey:对快捷方式设置快捷键,MAKEWORD(VK_F10, HOTKEYF_CONTROL)或者0表示不设置

lpszDescription:备注情况

iShowCmd:显示方式,可以为SW_SHOWNORMAL等等


调用函数方式例如:CreateFileShortcut(NULL, CA2T(chDesktopPath), _T("进程名称.lnk") ,NULL,MAKEWORD(VK_F10, HOTKEYF_CONTROL), _T("备注内容"));


BOOL CreateFileShortcut(LPCTSTR lpszFileName, LPCTSTR lpszLnkFileDir, LPCTSTR lpszLnkFileName,

LPCTSTR lpszWorkDir, WORD wHotkey, LPCTSTR lpszDescription, int iShowCmd = SW_SHOWNORMAL)

{

if (lpszLnkFileDir == NULL)

return FALSE;

HRESULT hr;

IShellLink     *pLink;  //IShellLink对象指针

IPersistFile   *ppf; //IPersisFil对象指针

//创建IShellLink对象

hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pLink);

if (FAILED(hr))

return FALSE;

//从IShellLink对象中获取IPersistFile接口

hr = pLink->QueryInterface(IID_IPersistFile, (void**)&ppf);

if (FAILED(hr))

{

pLink->Release();

return FALSE;

}

//目标

if (lpszFileName == NULL)

pLink->SetPath(_wpgmptr);

else

pLink->SetPath(lpszFileName);

//工作目录

if (lpszWorkDir != NULL)

pLink->SetPath(lpszWorkDir);

//快捷键

if (wHotkey != 0)

pLink->SetHotkey(wHotkey);

//备注

if (lpszDescription != NULL)

pLink->SetDescription(lpszDescription);

//显示方式

pLink->SetShowCmd(iShowCmd);

//快捷方式的路径 + 名称

char szBuffer[MAX_PATH];

std_string strLinkFileDir = lpszLnkFileDir;

std_string strLinkFileName = lpszLnkFileName;

if (lpszLnkFileName != NULL)

{

sprintf(szBuffer, "%s\\%s",strLinkFileDir.c_str(), strLinkFileName.c_str());

int x=1;

}

else  

{

//没有指定名称,就从取指定文件的文件名作为快捷方式名称。

char* szModule = new char[_MAX_PATH];

GetModuleFileNameA(NULL, szModule, _MAX_PATH);//得到本程序自身的全路径

char *pstr;

if (lpszFileName != NULL)

pstr = strrchr(CT2A(lpszFileName), '\\');

else

pstr = strrchr(_pgmptr, '\\');

if (pstr == NULL)

{

ppf->Release();

pLink->Release();

return FALSE;

}

//注意后缀名要从.exe改为.lnk

sprintf(szBuffer, "%s\\%s", lpszLnkFileDir, pstr);

int nLen = strlen(szBuffer);

szBuffer[nLen - 3] = 'l';

szBuffer[nLen - 2] = 'n';

szBuffer[nLen - 1] = 'k';

}

//保存快捷方式到指定目录下

WCHAR  wsz[MAX_PATH];  //定义Unicode字符串

MultiByteToWideChar(CP_ACP, 0, szBuffer, -1, wsz, MAX_PATH);

hr = ppf->Save(wsz, TRUE);

ppf->Release();

pLink->Release();

return SUCCEEDED(hr);

}

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言VC/MFC频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved