0
我试图使用IShellLink和IPersistFIle接口创建一个新的快捷链接文件。 通过调用IPersistFIle :: save()完成保存lnk文件后,我想删除保存函数返回后用于创建lnk的ico文件。但问题是lnk文件显示在空白页面中,而不是我使用的图标。
如果保存后我不调用deletefile(),则lnk文件看起来是正确的。
我的问题是,我什么时候可以在保存lnk文件后删除图标文件?
PS:我试着睡觉,因为在删除文件前2秒钟,而且lnk看起来也是正确的。我的代码
部分是波纹管:为什么lnk图标不能正确显示?
hRes = pShellLink->QueryInterface(IID_IPersistFile,(LPVOID*)&pPerFile);
if (SUCCEEDED(hRes))
{
WCHAR wszLinkFile[MAX_PATH + 1] = {0};
#ifdef _UNICODE
StringCchCopy(wszLinkFile, sizeof(wszLinkFile)/sizeof(wszLinkFile[0]), lpszLinkFilePath);
#else
MultiByteToWideChar(CP_ACP, 0, lpszLinkFilePath, -1, wszLinkFile, MAX_PATH);
#endif
hRes = pPerFile->Save(wszLinkFile, TRUE);
pPerFile->Release();
}
pShellLink->Release();
::CoUninitialize();
DeleteFile(lpszIconPath);
嗨,汉斯我用来创建一个lnk文件的图标是一个单独的.ico文件,并且IShellLink :: SetIconLocation()中的参数是该ico文件的位置。我试图在保存lnk文件几秒后删除ico文件,但未刷新图标缓存,ico看起来正确,但如果通过SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_FLUSHNOWAIT,0,0)刷新缓存,则lnk文件再次显示在空白页面中。所以我认为这可能与图标缓存有关。 – ericchan1336
我以为我很清楚。 *不要删除.ico文件*。 –
我现在知道了,谢谢汉斯。但我对不同的结果感到好奇。为什么保留ico文件并在IShellLink :: Save和lnk文件以及链接文件看起来正确之后几秒钟后删除它? – ericchan1336