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);
안녕하세요. 한스 파일을 만들 때 사용하는 아이콘은 별도의 .ico 파일이며 IShellLink :: SetIconLocation()의 매개 변수는 해당 ico 파일의 링크입니다. 몇 초 후에 lnk 파일을 저장 한 후 ico 파일을 삭제하려고 시도했지만 아이콘 캐시를 새로 고치지 않았습니다. ico가 올바르게 보이지만 SHChangeNotify (SHCNE_ASSOCCHANGED, SHCNF_FLUSHNOWAIT, 0, 0)로 캐시를 새로 고치면 lnk 파일이 빈 페이지에 다시 표시됩니다. 그래서 나는 이것이 아이콘 캐시와 관련이 있다고 생각합니다. – ericchan1336
나는 꽤 노골적이라고 생각했다. * .ico 파일을 삭제하지 마십시오. –
나는 그것을 안다, Hans 고마워. 그러나 나는 다른 결과에 대해 궁금합니다. 왜 IShellLink :: Save 및 lnk 파일과 링크 파일이 올바른지 확인한 후 몇 초 후에 ico 파일을 유지하고 삭제합니까? – ericchan1336