#include <iostream>
#include <atlconv.h>
#include <ShlObj.h>
#include <Shlwapi.h>
#pragma comment(lib, "Shlwapi.lib")
void createShutcut(char* szExe, char* szLink)
{
::CoInitialize(NULL);
HRESULT hr = S_OK;
IShellLink * pShl = NULL;
IPersistFile * ppf = NULL;
hr = ::CoCreateInstance( // 启动组件
CLSID_ShellLink, // 快捷方式 CLSID
NULL, // 聚合用(注4)
CLSCTX_INPROC_SERVER, // 进程内(Shell32.dll)服务
IID_IShellLink, // IShellLink 的 IID
(LPVOID *)&pShl); // 得到接口指针
if (SUCCEEDED(hr))
{
pShl->SetPath(szExe); // 全路径程序名
//pShl->SetArguments(); // 命令行参数
//pShl->SetDescription(); // 备注
//pShl->SetHotkey(); // 快捷键
//pShl->SetIconLocation(); // 图标
//pShl->SetShowCmd(); // 窗口尺寸
// 根据 EXE 的文件名,得到目录名
char workDir[MAX_PATH] = { 0 };
strcpy_s(workDir, szExe);
PathRemoveFileSpecA(workDir);
// 设置 EXE 程序的默认工作目录
pShl->SetWorkingDirectory(workDir);
hr = pShl->QueryInterface( // 查找持续性文件接口指针
IID_IPersistFile, // 持续性接口 IID
(LPVOID *)&ppf); // 得到接口指针
if (SUCCEEDED(hr))
{
USES_CONVERSION;
ppf->Save(A2OLE(szLink), TRUE);
}
}
if (pShl)
{
pShl->Release();
}
if (ppf)
{
ppf->Release();
}
::CoUninitialize();
}
int main(int argc, char* argv[])
{
createShutcut("C:\\Program Files (x86)\\Notepad++\\notepad++.exe", // 记事本程序。注意,你的系统是否也是这个目录?
"C:\\Users\\Administrator\\Desktop\\我的记事本.lnk");
// 桌面上建立快捷方式(lnk)文件的全路径名。注意,你的系统是否也是这个目录?
// 如果用程序实现寻找桌面的路径,则可以查注册表
// HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
return 0;
}