没有封装成函数
文件:
//快捷方式保存路径
char PathLink[]="D:/a file.lnk";
CoInitialize(NULL);
HRESULT hres;
IShellLink* psl;
// Get a pointer to the IShellLink interface.
hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,IID_IShellLink, (LPVOID*)&psl);
if (SUCCEEDED(hres))
{
IPersistFile* ppf;
//设置快捷方式的目标路径,添加描述
psl->SetPath(_T("D:/Mosaic2.jpg"));
//描述:就是备注
psl->SetDescription(_T("link of file"));
//生成快捷方式
hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);
if (SUCCEEDED(hres))
{
WCHAR wsz[MAX_PATH];
// Ensure that the string is Unicode.
MultiByteToWideChar(CP_ACP, 0, PathLink, -1, wsz, MAX_PATH);
// TODO: Check return value from MultiByteWideChar to ensure
// Save the link by calling IPersistFile::Save.
hres = ppf->Save(wsz, TRUE);
ppf->Release();
}
psl->Release();
}
CoUninitialize();
效果图:(这里生成的是一张图片的快捷方式)
文件夹:(可以自己设置返回BOOL值)
CString strName("www");//快捷方式名称
CString path;//快捷方式目标路径
path.Format(_T("D:\\www"));
if (FAILED(CoInitialize(NULL)))
{
return ;
}
int i = CSIDL_DESKTOPDIRECTORY;
//用于获取系统默认路径
TCHAR Path[MAX_PATH + 1];
CString strDestDir;
LPITEMIDLIST pidl;
LPMALLOC pShell;
if (SUCCEEDED(SHGetMalloc(&pShell)))
{
if (SUCCEEDED(SHGetSpecialFolderLocation(NULL, i, &pidl)))
{
if (!SHGetPathFromIDList(pidl, Path))
{
pShell->Free(pidl);
::CoUninitialize();
return ;
}
pShell->Release();
strDestDir.Format(_T("%s"), Path);//保存快捷方式的文件夹
strDestDir += "\\";
strDestDir += strName;//设置桌面快捷方式的名字
strDestDir += ".lnk";//快捷方式的后缀名
IShellLink* psl;
if (SUCCEEDED(CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl)))
{
psl->SetPath(path);//设置快捷方式的目标位置
//比如目标位置为C:\windows\a.txt 起始位置就应该设置为C:\windows否则会导致不可预料的错误
//如果是文件夹的快捷方式起始位置和目标位置可以设置为一样
psl->SetWorkingDirectory(path); //设置快捷方式的起始位置
IPersistFile* ppf;
if (SUCCEEDED(psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf)))
{
if (SUCCEEDED(ppf->Save(strDestDir, TRUE)))//保存快捷方式到桌面
{
//例子中声明void,这里就不写
}
}
ppf->Release();
psl->Release();
::CoUninitialize();
return ;
}
}
}
::CoUninitialize();
return ;
效果图: