相关的接口:IurlHistoryStg、IEnumSTATURL、IurlHistoryStg2
相关的方法:
IurlHistoryStg:: EnumUrls
该方法返回一个IEnumSTATURL接口指针,后者用来枚举IE的历史记录。
LRESULT
IEnumSTATURL
::
Next(ULONG celt, LPSTATURL rgelt, ULONG *pceltFetched)
参数说明:
celt 意义不明,不能为0,可以将其设为1。
Rgelt 是STATURL结构指针,该结构由MS-IE填充。
PceltFetched 由方法返回,返回1表示rgelt结构被成功填充了。若要用到第二参数
内的数据,应该判断该值是否为1。
头文件:UrlHist.h
下面是代码例子(所需头文件:comdef.h, afxtempl.h):
BOOL GetHistory(CStringList & list)
{
STATURL url;
CString strUrl;
ULONG uFetched;
IUrlHistoryStg2Ptr history;
IEnumSTATURLPtr enumPtr;
if(FAILED(CoCreateInstance( CLSID_CUrlHistory,
NULL,
CLSCTX_INPROC_SERVER,
IID_IUrlHistoryStg2,
(void**)&history)))
{
return false;
}
if(FAILED(history->EnumUrls(&enumPtr)))
return false;
while(SUCCEEDED(enumPtr->Next(1,&url,&uFetched)))
{
if(uFetched==0)
break;
strUrl = url.pwcsUrl;
list.AddTail(strUrl);
}
return true;
}
另一个有用的方法
:
LRESULT IEnumSTATURL::SetFilter(LPCOLESTR poszFilter, DWORD dwFlags);
可以在调用Next枚举历史记录前调用此方法设置过滤器。PoszFilter应如何设置呢?
通过判断其URL与poszFilter是否完全匹配或前缀匹配。
例如 enumPtr->SetFilter(L"http",STATURL_QUERYFLAG_ISCACHED);
那么记录的URL只有带有http开头,才会被Next枚举到。把poszFilter设置成res、
file等就可以得到不同类型的URL。
另一个方法:
ClearHistory
调用它可以清除所有的历史记录,但注意该方法是属于IUrlHistoryStg2接口