summaryrefslogtreecommitdiffabout
path: root/URLSource.cpp
blob: 7c265b72531c8410de5edd85d030927f6b77b0fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "stdafx.h"
#include "URLSource.h"

#include <intshcut.h>
#include <initguid.h>
#include <isguids.h>

CURLSource::CURLSource(LPCTSTR strURL)
{
IUniformResourceLocator *lpURL;
	if(CoCreateInstance(CLSID_InternetShortcut,NULL,CLSCTX_INPROC_SERVER,IID_IUniformResourceLocator,(LPVOID*)&lpURL)==S_OK){
		ASSERT(lpURL);
		lpURL->SetURL(strURL,IURL_SETURL_FL_GUESS_PROTOCOL);
	LPDATAOBJECT lpDO = NULL;
		VERIFY(lpURL->QueryInterface(IID_IDataObject,(LPVOID*)&lpDO)==S_OK);
	COleDataObject odo;
		odo.Attach(lpDO,TRUE);
		odo.BeginEnumFormats();
	FORMATETC fe;
		while(odo.GetNextFormat(&fe)){
		HGLOBAL hg = odo.GetGlobalData(fe.cfFormat,NULL);
			if(hg)
				CacheGlobalData(fe.cfFormat,hg,NULL);
		}
		lpURL->Release();
	}
HGLOBAL hg = GlobalAlloc(GHND,strlen(strURL)+1);
LPVOID lpv = GlobalLock(hg);
	memmove(lpv,strURL,strlen(strURL)+1);
	GlobalUnlock(hg);
	CacheGlobalData(CF_TEXT,hg,NULL);
}