windows下,讀取快捷方式lnk所指向的路徑


BOOL GetLnkFileName(
	OUT PWSTR pLnkName,
	OUT PWSTR OepnFileNameBuufer,
	IN DWORD OpenFileNameBufferSize) //傳入快捷方式,返回快捷方式指向的文件名
{
	CoInitialize(0);
	BOOL bRet = FALSE; //返回值判斷.
	IShellLinkW* shlink = 0;
	IPersistFile* persist = 0;
	WIN32_FIND_DATA wfd;
	PWSTR MyXbpathBuffer = NULL;

	if (NULL == OepnFileNameBuufer)
	{
		OutputDebugString(TEXT("Sorry FUN: GetGlobalOpenFileName HeadAlloc Fail "));
		return FALSE;
	}



	HRESULT hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkW, (void**)&shlink);
	if (SUCCEEDED(hr)) {
		hr = shlink->QueryInterface(IID_IPersistFile, (void**)&persist);
		if (SUCCEEDED(hr)) {
			hr = persist->Load(pLnkName, STGM_READ);
			if (SUCCEEDED(hr)) {
				// shlink->Resolve(0, SLR_ANY_MATCH | SLR_NO_UI);           
				hr = shlink->GetPath(OepnFileNameBuufer, OpenFileNameBufferSize, &wfd, SLGP_RAWPATH);
			}
			persist->Release();
		}
		shlink->Release();
	}
	

	
RELEASE:
	CoUninitialize();

	if (NULL != MyXbpathBuffer)
	{
		delete MyXbpathBuffer;
	}
	return TRUE; 
	
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM