需要先调用 CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
使用CoUninitialize() 释放资源
//注意lpLink 必须以.lnk为扩展名
//如:CeateShortcut(GetDesktopPath() + L"//QQ.lnk", L"C://Tencent//QQ//QQ.exe", L"C://Tencent//QQ//QQ.ico", 0);
//
#include <Windows.h>
#include <Objbase.h>
#include <atlbase.h>
#include <shlobj.h>
#include <atlcoll.h>
BOOL CreateShortcut(LPCWSTR lpLink, LPCWSTR lpPath, LPCWSTR lpIconPath, int nIconIndex)
{
CComQIPtr<IShellLink> pSL;
pSL.CoCreateInstance(CLSID_ShellLink);
if (!pSL)
return FALSE;
HRESULT hr = pSL->SetPath(lpPath);
if (FAILED(hr))
return FALSE;
if (lpIconPath != NULL)
{
hr = pSL->SetIconLocation(lpIconPath, nIconIndex);
if (FAILED(hr))
return FALSE;
}
CComQIPtr<IPersistFile> pPF = pSL;
if (!pPF)
return FALSE;
hr = pPF->Save(lpLink, STGM_READWRITE);
if (FAILED(hr))
return FALSE;
return TRUE;
}
//得到桌面的物理路径
//
#include <windows.h>
#include <string>
#include <tchar.h>
using namespace std;
wstring GetDesktopPath()
{
wstring strPath;
WCHAR szPath[MAX_PATH + 1];
::ZeroMemory(szPath, sizeof(szPath));
if (::SHGetSpecialFolderPathW(NULL, szPath, CSIDL_DESKTOPDIRECTORY, FALSE))
strPath = szPath;
return strPath;
}