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