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