如何得到IE的历史记录和清除IE的历史记录

时间:2022-09-01 20:23:15
相关的接口: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接口