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; 
	
}
原文地址:https://www.cnblogs.com/iBinary/p/10749710.html