2012-09-04 103 views
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); 

回答

2

你沒有張貼足夠的代碼,但該方法名是::的IShellLink SetIconLocation()。

位置

您刪除圖標和位置不再有效。

樣板將使用嵌入在可執行文件中的圖標作爲資源。但是,如果您使用單獨的.ico文件,那麼您需要保持其有效性。

+0

嗨,漢斯我用來創建一個lnk文件的圖標是一個單獨的.ico文件,並且IShellLink :: SetIconLocation()中的參數是該ico文件的位置。我試圖在保存lnk文件幾秒後刪除ico文件,但未刷新圖標緩存,ico看起來正確,但如果通過SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_FLUSHNOWAIT,0,0)刷新緩存,則lnk文件再次顯示在空白頁面中。所以我認爲這可能與圖標緩存有關。 – ericchan1336

+0

我以爲我很清楚。 *不要刪除.ico文件*。 –

+0

我現在知道了,謝謝漢斯。但我對不同的結果感到好奇。爲什麼保留ico文件並在IShellLink :: Save和lnk文件以及鏈接文件看起來正確之後幾秒鐘後刪除它? – ericchan1336

相關問題