/*PARAMETERS
fname_to_create_link = (e.g.)
"c:\\mytextfile.txt "
lnk_fname = (e.g.)
"yourname.lnk "
*/
void CreateLinkThenChangeIcon(LPTSTR fname_to_create_link,
LPTSTR lnk_fname)
{
HRESULT hres;
IShellLink *psl = NULL;
IPersistFile *pPf = NULL;
WORD wsz[256];
TCHAR buf[256];
int
id
;
LPITEMIDLIST pidl;
hres = CoCreateInstance( CLSID_ShellLink,
NULL,
CLSCTX_INPROC_SERVER,
IID_IShellLink,
(LPVOID*)&psl);
if
(FAILED(hres))
goto cleanup;
hres = psl-> QueryInterface(IID_IPersistFile, (LPVOID*)&pPf);
if
(FAILED(hres))
goto cleanup;
hres = psl-> SetPath(fname_to_create_link);
if
(FAILED(hres))
goto cleanup;
//place
the shortcut on the desktop
SHGetSpecialFolderLocation(hwnd, CSIDL_DESKTOP, > pidl);
SHGetPathFromIDList(pidl, buf);
lstrcat(buf,
"\\ "
);
lstrcat(buf,lnk_fname);
MultiByteToWideChar(CP_ACP, 0, buf, -1, wsz, MAX_PATH);
hres = pPf-> Save(wsz, TRUE);
if
(FAILED(hres))
goto cleanup;
GetSystemDirectory(buf, 256);
lstrcat(buf,
"\\shell32.dll "
);
hres = psl-> SetIconLocation(buf, 1);
if
(FAILED(hres))
goto cleanup;
hres = psl-> GetIconLocation(buf, 256, &
id
);
if
(FAILED(hres))
goto cleanup;
pPf-&Save(wsz, TRUE);
cleanup:
if
(pPf)
pPf-> Release();
if
(psl)
psl-> Release();
}