windows C++ 创建快捷方式API, 100% 能运行

/* 函数功能:对指定文件在指定的目录下创建其快捷方式
函数参数:
lpszFileName    指定文件,为NULL表示当前进程的EXE文件。
lpszLnkFileDir  指定目录,不能为NULL。
lpszLnkFileName 快捷方式名称,为NULL表示EXE文件名。
wHotkey         为0表示不设置快捷键
pszDescription  备注
iShowCmd        运行方式,默认为常规窗口
*/


#include <ShObjIdl.h>
#include <ShlGuid.h>


BOOL CreateFileShortcut(

LPCSTR lpszFileName, 
LPCSTR lpszLnkFileDir, 
LPCSTR lpszLnkFileName, 
LPCSTR lpszWorkDir, 
WORD wHotkey, 
LPCTSTR lpszDescription, 
int iShowCmd)
{
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(_pgmptr);
else
pLink->SetPath(lpszFileName);


//工作目录
if (lpszWorkDir != NULL)
pLink->SetWorkingDirectory(lpszWorkDir);


//快捷键
if (wHotkey != 0)
pLink->SetHotkey(wHotkey);


//备注
if (lpszDescription != NULL)
pLink->SetDescription(lpszDescription);


//显示方式
pLink->SetShowCmd(iShowCmd);




//快捷方式的路径 + 名称
char szBuffer[MAX_PATH];
if (lpszLnkFileName != NULL) //指定了快捷方式的名称
sprintf(szBuffer, "%s\\%s", lpszLnkFileDir, lpszLnkFileName);
else  
{
//没有指定名称,就从取指定文件的文件名作为快捷方式名称。
const char *pstr;
if (lpszFileName != NULL)
pstr = strrchr(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);

}




int _tmain(int argc, const char *argv[])
{
CoInitialize(NULL);
CreateFileShortcut(NULL, "D:\\", "贝壳.lnk", "D:\\", 0, "好吃到起飞", 0);
CoUninitialize();
return 0;
}


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值