2012-09-04 7 views
0


IShellLink 및 IPersistFIle 인터페이스를 사용하여 새로운 바로 가기 링크 파일을 만들려고했습니다. IPersistFIle :: save()을 호출하여 lnk 파일을 저장 한 후 save 함수가 반환 된 직후에 lnk 파일을 삭제하고 싶습니다. 하지만 문제는 lnk 파일이 내가 사용한 아이콘이 아닌 빈 페이지에 표시된다는 것입니다.
저장 후 deletefile()을 호출하지 않으면 lnk 파일이 올바르게 보입니다.
제 질문은 언제 lnk 파일을 저장 한 후 아이콘 파일을 삭제할 수 있습니까?
추신 : 파일을 삭제하기 전에 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

안녕하세요. 한스 파일을 만들 때 사용하는 아이콘은 별도의 .ico 파일이며 IShellLink :: SetIconLocation()의 매개 변수는 해당 ico 파일의 링크입니다. 몇 초 후에 lnk 파일을 저장 한 후 ico 파일을 삭제하려고 시도했지만 아이콘 캐시를 새로 고치지 않았습니다. ico가 올바르게 보이지만 SHChangeNotify (SHCNE_ASSOCCHANGED, SHCNF_FLUSHNOWAIT, 0, 0)로 캐시를 새로 고치면 lnk 파일이 빈 페이지에 다시 표시됩니다. 그래서 나는 이것이 아이콘 캐시와 관련이 있다고 생각합니다. – ericchan1336

+0

나는 꽤 노골적이라고 생각했다. * .ico 파일을 삭제하지 마십시오. –

+0

나는 그것을 안다, Hans 고마워. 그러나 나는 다른 결과에 대해 궁금합니다. 왜 IShellLink :: Save 및 lnk 파일과 링크 파일이 올바른지 확인한 후 몇 초 후에 ico 파일을 유지하고 삭제합니까? – ericchan1336

관련 문제