直接上代码:
bool ChangeLinkIcon(const CString &strLnkName, const CString &strIconPath)
{if (strLnkName.IsEmpty() || strIconPath.IsEmpty())
{
return false;
}
HRESULT hres;
IShellLink *psl = NULL;
IPersistFile *pPf = NULL;
int id;
LPITEMIDLIST pidl;
bool bRet = false;
do
{
hres = CoInitialize(NULL);
if (FAILED(hres))
{
break;
}
hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl);
if (FAILED(hres))
{
break;
}
hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&pPf);
if (FAILED(hres))
{
break;
}
hres = pPf->Load(strLnkName, STGM_READWRITE);
if (FAILED(hres))
{
break;
}
hres = psl->SetIconLocation(strIconPath, 0);
if (FAILED(hres))
{
break;
}
pPf->Save(strLnkName, TRUE);
if (FAILED(hres))
{
break;
}
bRet = true;
} while (0);
if (pPf != NULL)
{
pPf->Release();
}
if (psl != NULL)
{
psl->Release();
}
CoUninitialize();
return bRet;
}
调用方式:
ChangeLinkIcon("c:\\桌面\\aaa.lnk", "c:\\Program files\\aaa\\icon.ico");