• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 关于AtlIE编程,高手请进!

关于AtlIE编程,高手请进!

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了编程高手,编程高手箴言,如何成为编程高手,编程高手箴言pdf,中国编程高手等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 关于Atl IE编程,高手请进!
描述:

我最近想做一个ie监控的东东,对用户在浏览器里面的操作事件进行监控,比如输入url,下载东西、添加书签等,查阅了很多资料,原来用browser helper object来实现。找到一个例子,可是按照上面所说的弄下来,效果就是出不来,请大家给看看是怎么回事。
这个例子就是当用户输入一个网址、或者改变网址的时候,程序能够知道这个事件,弹出一个对话框!
这个例子的网址是
http://www.programfan.com/article/showarticle.asp?id=2872
下面是主程序的源码:
头文件:
// EyeOnIE.h : Declaration of the CEyeOnIE
#ifndef __EYEONIE_H_
#define __EYEONIE_H_
#include "resource.h"       // main symbols
#include "ExDispID.h"
#include "ExDisp.h"
/////////////////////////////////////////////////////////////////////////////
// CEyeOnIE
class ATL_NO_VTABLE CEyeOnIE : 
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CEyeOnIE, &CLSID_EyeOnIE>,
public IObjectWithSiteImpl<CEyeOnIE>,
public IDispatchImpl<IEyeOnIE, &IID_IEyeOnIE, &LIBID_IEPLUGINLib>
{
public:
CEyeOnIE()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_EYEONIE)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CEyeOnIE)
COM_INTERFACE_ENTRY(IEyeOnIE)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IObjectWithSite)
END_COM_MAP()
// IEyeOnIE
public:
CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> mWebBrowser2;
DWORD mCookie;
STDMETHOD(SetSite)(IUnknown *pUnkSite);
HRESULT RegisterEventHandler(BOOL inAdvise);
   STDMETHODIMP Invoke (DISPID dispidMember,REFIID riid, LCID lcid, 
            WORD wFlags, DISPPARAMS * pDispParams, 
            VARIANT * pvarResult,EXCEPINFO * pexcepinfo, 
            UINT * puArgErr);
};
#endif //__EYEONIE_H_
==========================================================
实现代码:
// EyeOnIE.cpp : Implementation of CEyeOnIE
#include "stdafx.h"
#include "IEplugin.h"
#include "EyeOnIE.h"
#include "ExDisp.h"
/////////////////////////////////////////////////////////////////////////////
// CEyeOnIE
STDMETHODIMP CEyeOnIE::SetSite(IUnknown *pUnkSite)
{
USES_CONVERSION;
if (pUnkSite)
{
mWebBrowser2 = pUnkSite;
if (mWebBrowser2)
{
return RegisterEventHandler(TRUE);
}
}
return E_FAIL;
}
HRESULT CEyeOnIE::RegisterEventHandler(BOOL inAdvise)
{
CComPtr<IConnectionPoint> spCP;
// Receives the connection point for WebBrowser events
    CComQIPtr<IConnectionPointContainer, &IID_IConnectionPointContainer> spCPC(mWebBrowser2);
HRESULT hr=spCPC->FindConnectionPoint(DIID_DWebBrowserEvents2, &spCP);
if(FAILED(hr))
return hr;
    if(inAdvise)
{
         //pass the event handlers to the  container
hr=spCP->Advise(reinterpret_cast<IDispatch*>(this), &mCookie);
}
else{
spCP->Unadvise(mCookie);
}
     return hr;
}
STDMETHODIMP CEyeOnIE::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)
{
case DISPID_BEFORENAVIGATE2:
{
::MessageBox(NULL, _T("该网页已被禁止!"),_T("Warning"),MB_ICONSTOP);
LPOLESTR lpURL=NULL;
mWebBrowser2->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);
}
if(strstr(strurl,"girls.com"))
{
             *pDispParams->rgvarg[0].pboolVal = TRUE;
::MessageBox(NULL, _T("该网页已被禁止!"),_T("Warning"),MB_ICONSTOP);
return S_OK;
}
break;
}
case DISPID_NAVIGATECOMPLETE2:
break;
case DISPID_DOCUMENTCOMPLETE:
break;
case DISPID_DOWNLOADBEGIN:
break;
case DISPID_DOWNLOADCOMPLETE:
break;
case DISPID_NEWWINDOW2:
break;
case DISPID_QUIT:
RegisterEventHandler(FALSE);
break;
default:
break;
  
         
}
    return S_OK;
}
=============================================
EyeOnIE.rgs
HKCR
{
IEplugin.EyeOnIE.1 = s 'EyeOnIE Class'
{
CLSID = s '{71413549-66A6-4ACB-B5D6-2BB7A757BA20}'
}
IEplugin.EyeOnIE = s 'EyeOnIE Class'
{
CLSID = s '{71413549-66A6-4ACB-B5D6-2BB7A757BA20}'
CurVer = s 'IEplugin.EyeOnIE.1'
}
NoRemove CLSID
{
ForceRemove {71413549-66A6-4ACB-B5D6-2BB7A757BA20} = s 'EyeOnIE Class'
{
ProgID = s 'IEplugin.EyeOnIE.1'
VersionIndependentProgID = s 'IEplugin.EyeOnIE'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
'TypeLib' = s '{5F5E0AE2-A75E-4084-9DE2-C624C578B5EE}'
}
}
}
HKLM
{
SOFTWARE
{
Microsoft
{
Windows
{
CurrentVersion
{
Explorer
{
'Browser Helper Objects'
{
{6E28339B-7A2A-47B6-AEB2-46BA53782379}
}
}
}
}
}
}
}


解决方案1:

HKLM
{
SOFTWARE
{
Microsoft
{
Windows
{
CurrentVersion
{
Explorer
{
'Browser Helper Objects'
{
// 下面的必须是自己的CLSID
// 在你这个工程里,CLSID是'{71413549-66A6-4ACB-B5D6-2BB7A757BA20}
{6E28339B-7A2A-47B6-AEB2-46BA53782379}
}
}
}
}
}
}
}


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 语言包的问题,高手进,解决马上结贴
  • DLL的调用问题,请问网络高手和系统编程高手~`
  • 多线程编程高手看看我的代码有什么问题。
  • 关于AtlIE编程,高手请进!

相关文章

  • 2017-06-05 线程的ID何时才有效?
  • 2017-06-05 SOS---Alt的ActiveX组件在C#中Debug
  • 2017-06-04 ATL组件在ASP中调用出错
  • 2017-06-04 [讨论]觉得非代理接口没有必要啊
  • 2017-06-05 DLL中封装对话框老出错???
  • 2017-06-04 这个KCF跟踪算法如何运行?
  • 2017-06-04 高分求教:BHO技术拦截Flash,但写入的js代码无效!
  • 2017-06-04 好难啊!!!请问各位VC能不能接受VB的自定义事件?
  • 2017-06-04 MFC中DataGrid中的数据保存为excel问题
  • 2017-06-04 64位系统下,编程的问题,请教。

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 求救:VC调用word时,怎样才能隐藏word的某些菜单项
    • 助你提高工作效率的六则Office技巧
    • [跪谢]请教IEToolbar按钮摆放问题
    • 刚刚开始学习atl,有点困惑,请过来人指教。
    • COM组件的变量问题?
    • 高手请进,急,Word的OLE问题
    • 各位能否推荐一本较好的ATL的中文电子书籍?希望能给出网址!
    • 急救:用MFC写控件,怎样才能在控件中自己调整自己的大小,在线等,解决立马给分
    • 200+困扰很久响应鼠标单击或者双击资源管理器的空白处能不能解决都来顶下--谢谢大家!
    • DsoFramer的问题,一大堆啊,用过该控件的请一定进!

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有