2012-09-04 54 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

相关问题