IE浏览器网页网址监控
来源:互联网 发布:ddos网页端源码 编辑:程序博客网 时间:2024/04/29 15:34
/***************************************************
第一次写博客
**************************************************/
工作中遇到了个网页监控的任务,从网上找了个例子,改了下,实现了网页网址监控及网页元素获取(功能是实现了,但是还是有很多不明白的地方,主要是用到com技术的地方不明白,有时间得学学com-_-!);
使用的是浏览器拓展而不是浏览器插件;
新建一个VS ATL工程,然后添加ATL类 :COM 1.0组件;
需要实现com的两个接口:
STDMETHOD(SetSite)(IUnknown *pUnkSite);STDMETHOD(Invoke)(DISPID dispidMember,REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS * pDispParams, VARIANT * pvarResult,EXCEPINFO * pexcepinfo,UINT * puArgErr);
</pre><pre name="code" class="cpp">在类的基类继承添加:
<pre name="code" class="cpp">public IObjectWithSiteImpl<CExplorerBHO>,public IDispEventImpl<1, CExplorerBHO, &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 1>
</pre><pre name="code" class="cpp">头文件中还需添加以下类容:
<pre name="code" class="cpp">BEGIN_COM_MAP(CExplorerBHO)COM_INTERFACE_ENTRY(IExplorerBHO)COM_INTERFACE_ENTRY(IDispatch)COM_INTERFACE_ENTRY(IObjectWithSite)END_COM_MAP()
</pre><pre name="code" class="cpp"><pre name="code" class="cpp">////////不晓得为啥,这个必须要加,不加编译不过-_-!BEGIN_SINK_MAP(CExplorerBHO) END_SINK_MAP()
</pre><pre name="code" class="cpp"><pre name="code" class="cpp">CComPtr<IWebBrowser2> m_spWebBrowser; BOOL m_fAdvised;
</pre><pre name="code" class="cpp">
</pre>以下是实现文件:
<pre name="code" class="cpp">STDMETHODIMP CExplorerBHO::SetSite(IUnknown* pUnkSite) { static bool isinit;if (!isinit){isinit = true;initURL();}if (pUnkSite != NULL) { // Cache the pointer to IWebBrowser2. HRESULT hr = pUnkSite->QueryInterface(IID_IWebBrowser2, (void **)&m_spWebBrowser); if (SUCCEEDED(hr)) { // Register to sink events from DWebBrowserEvents2. hr = DispEventAdvise(m_spWebBrowser); if (SUCCEEDED(hr)) { m_fAdvised = TRUE; } } } else { // Unregister event sink. if (m_fAdvised) { DispEventUnadvise(m_spWebBrowser); m_fAdvised = FALSE; } // Release cached pointers and other resources here. m_spWebBrowser.Release(); } // Call base class implementation. return IObjectWithSiteImpl<CExplorerBHO>::SetSite(pUnkSite); } STDMETHODIMP CExplorerBHO::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags,DISPPARAMS* pDispParams, VARIANT* pvarResult,EXCEPINFO* pExcepInfo, UINT* puArgErr){USES_CONVERSION;if (!pDispParams)return E_INVALIDARG; switch (dispidMember){//// The parameters for this DISPID are as follows:// [0]: Cancel flag - VT_BYREF|VT_BOOL// [1]: HTTP headers - VT_BYREF|VT_VARIANT// [2]: Address of HTTP POST data - VT_BYREF|VT_VARIANT // [3]: Target frame name - VT_BYREF|VT_VARIANT // [4]: Option flags - VT_BYREF|VT_VARIANT// [5]: URL to navigate to - VT_BYREF|VT_VARIANT// [6]: An object that evaluates to the top-level or frame// WebBrowser object corresponding to the event. //case DISPID_BEFORENAVIGATE2:{
<span style="white-space:pre"></span>//////网页加载前会收到这个消息,可以在里面监控网址LPOLESTR lpURL = NULL;m_spWebBrowser->get_LocationURL(&lpURL);char * strurl;if (pDispParams->cArgs >= 5 && pDispParams->rgvarg[5].vt == (VT_BYREF|VT_VARIANT)){CComVariant varURL(*pDispParams->rgvarg[5].pvarVal);varURL.ChangeType(VT_BSTR);strurl = OLE2A(varURL.bstrVal);OutputDebugString(L"打开的网址:");OutputDebugString(A2W(strurl));OutputDebugString(L"\r\n");}} break;default:break;}//return S_OK;return IDispatchImpl<IExplorerBHO, &IID_IExplorerBHO, &LIBID_Se_IExplorerBHOLib, /*wMajor =*/ 1, /*wMinor =*/ 0>::Invoke(dispidMember, riid, lcid, wFlags,pDispParams, pvarResult, pExcepInfo, puArgErr);}代码码完后,修改*.rgs文件(注:要将uuid改为你自己的uuid):
HKLM { NoRemove SOFTWARE { NoRemove Microsoft { NoRemove Windows { NoRemove CurrentVersion { NoRemove Explorer { NoRemove 'Browser Helper Objects' { ForceRemove '{029C996B-5A32-4FB3-A2BB-BDD04677FC2B}' = s 'HelloWorldBDO' { val 'NoExplorer' = d '1' } } } } } } } }
OK,编译后会自动注册dll的。浏览器一启动就会加载该dll。
稍后我会将源码上传,供大家下载。
</pre><pre name="code" class="cpp">
0 0
- IE浏览器网页网址监控
- IE浏览器网址被劫持
- IE浏览器无法打开网页
- IE浏览器被2345网址导航劫持
- Delphi开发嵌入式IE浏览器监控程序
- 网页调用IE浏览器的打印功能
- 网页制作IE浏览器功能汇总
- IE浏览器网页弹出窗口的应对
- IE浏览器打不开网页解决方法之一
- 网页调用IE浏览器的打印功能
- 网页在IE浏览器的居中办法:
- IE无法打开网页,其他浏览器正常
- ShellExecute指定IE浏览器打开网页
- Java 启动IE浏览器打开指定网页
- 网页 强制使用ie浏览器模式设置
- win7 ie浏览器无法加载网页
- IE浏览器使用JS打印部分网页
- 如何把IE浏览器上的网址大全卸载
- STM32F RTC不起振
- 比特币及众多山寨币,未来在哪里?
- 前端开发必备!Emmet使用手册
- vim函数跳转技巧
- plsql developer使用技巧
- IE浏览器网页网址监控
- 比特币是最好的记账单位
- windows C开发Socket
- uva 11149 - Power of Matrix(矩阵倍增)
- Emmet快速编写CSS样式
- DATAGUARD原理
- 实用JS代码大全
- POJ-2886-Who Gets the Most Candies?
- 第二十五周工作日志