-rw-r--r-- | URLSource.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/URLSource.cpp b/URLSource.cpp new file mode 100644 index 0000000..7c265b7 --- a/dev/null +++ b/URLSource.cpp | |||
@@ -0,0 +1,32 @@ | |||
1 | #include "stdafx.h" | ||
2 | #include "URLSource.h" | ||
3 | |||
4 | #include <intshcut.h> | ||
5 | #include <initguid.h> | ||
6 | #include <isguids.h> | ||
7 | |||
8 | CURLSource::CURLSource(LPCTSTR strURL) | ||
9 | { | ||
10 | IUniformResourceLocator *lpURL; | ||
11 | if(CoCreateInstance(CLSID_InternetShortcut,NULL,CLSCTX_INPROC_SERVER,IID_IUniformResourceLocator,(LPVOID*)&lpURL)==S_OK){ | ||
12 | ASSERT(lpURL); | ||
13 | lpURL->SetURL(strURL,IURL_SETURL_FL_GUESS_PROTOCOL); | ||
14 | LPDATAOBJECT lpDO = NULL; | ||
15 | VERIFY(lpURL->QueryInterface(IID_IDataObject,(LPVOID*)&lpDO)==S_OK); | ||
16 | COleDataObject odo; | ||
17 | odo.Attach(lpDO,TRUE); | ||
18 | odo.BeginEnumFormats(); | ||
19 | FORMATETC fe; | ||
20 | while(odo.GetNextFormat(&fe)){ | ||
21 | HGLOBAL hg = odo.GetGlobalData(fe.cfFormat,NULL); | ||
22 | if(hg) | ||
23 | CacheGlobalData(fe.cfFormat,hg,NULL); | ||
24 | } | ||
25 | lpURL->Release(); | ||
26 | } | ||
27 | HGLOBAL hg = GlobalAlloc(GHND,strlen(strURL)+1); | ||
28 | LPVOID lpv = GlobalLock(hg); | ||
29 | memmove(lpv,strURL,strlen(strURL)+1); | ||
30 | GlobalUnlock(hg); | ||
31 | CacheGlobalData(CF_TEXT,hg,NULL); | ||
32 | } | ||