关于BHO的使用介绍,可以参见
(1)Building Browser Helper Objects with Visual Studio 2005
链接地址:http://msdn.microsoft.com/en-us/library/bb250489.aspx
(2)Browser Helper Objects: The Browser the Way You Want It
链接地址:http://msdn.microsoft.com/en-us/library/bb250436%28v=vs.85%29.aspx
这两篇文章都已经在我前面的文章中进行了详细地介绍。
简单描述一下检测检测过程:
首先,我们需要捕获DISPID_STATUSTEXTCHANGE事件(因为我一直没有找到合适的事件来捕获所有的文件下载过程,当然,你可以试一试DISPID_DOCUMENTCOMPLETE,DISPID_DOWNLOADCOMPLETE以及DISPID_FILEDOWNLOAD等事件)
在Invoke函数中,添加如下事件处理代码:
STDMETHODIMP CIECacheFileDetecter::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pvarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr)
{
USES_CONVERSION;
strstream strEventInfo;
if (!pDispParams)
return E_INVALIDARG;
switch (dispidMember)
{
...
case DISPID_STATUSTEXTCHANGE:
LPOLESTR lpStatusText;
m_spWebBrowser2->get_StatusText(&lpStatusText);
strEventInfo << "StatusTextChange: ";
if (!StrCmp(OLE2T(lpStatusText), _T("")))
{
ATLTRACE(_T("Status Text: NULL/n"));
}
else
{
LPCTSTR pszStatusText = OLE2T(lpStatusText);
LPCTSTR pszMatchKey = _T("http");
LPTSTR pszSubText = StrStr(pszStatusText,pszMatchKey);
if (NULL != pszSubText)
{
ATLTRACE(_T("Status Text Change: %s/n"),pszStatusText);
LPTSTR pszEnd = StrStr(pszSubText,_T("..."));
if (NULL != pszEnd)