• 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 > C++捕获自动化的InternetExplorer的DWebBrowser2事件,程序被阻塞的问题。

C++捕获自动化的InternetExplorer的DWebBrowser2事件,程序被阻塞的问题。

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

佚名通过本文主要向大家介绍了 C++捕获自动化的InternetExplorer的DWebBrowser2事件,程序被阻塞的问题。等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: C++捕获自动化的Internet Explorer的DWebBrowser2事件,程序被阻塞的问题。
描述:

从Idispatch继承的一个类,实现了invoke,但截取部分事件后IE就被锁住了,不能继续。测试只捕获了5个事件,到beginnagtive就不行了。。
下面是程序:
//ieevent.cpp
#include ".\ieevent.h"
#include "stdio.h"
#include <atlbase.h>
CIEEvent::CIEEvent(/*IWebBrowser2 *pInternetExplorer*/)
: m_pConnectionPoint(NULL)
, m_dwCookie(0)
{
/*IConnectionPointContainer *pCPContainer;
HRESULT hr=pInternetExplorer ->QueryInterface(IID_IConnectionPointContainer,(void **)&pCPContainer);
if (SUCCEEDED(hr))
{
hr=pCPContainer->FindConnectionPoint(DIID_DWebBrowserEvents2,&m_pConnectionPoint);
if(SUCCEEDED(hr))
{
hr=m_pConnectionPoint->Advise(this,&m_dwCookie);
if(FAILED(hr))
OutputDebugString("\n连接事件失败!\n");
}
else
OutputDebugString("\n连接事件失败!\n");
}*/
    
}
CIEEvent::~CIEEvent(void)
{
/*if( m_pConnectionPoint )
{
HRESULT hr= m_pConnectionPoint->Unadvise(m_dwCookie);
if(FAILED(hr))
{
OutputDebugString("\n断开连接失败!\n");
}
}*/
}
HRESULT STDMETHODCALLTYPE CIEEvent::QueryInterface( 
                /* [in] */ REFIID riid,
                /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject)
{
if (!ppvObject)
return E_POINTER;
*ppvObject=NULL;
if(riid == IID_IUnknown)
*ppvObject = static_cast<IUnknown *>(this);
else 
if(riid == IID_IDispatch)
*ppvObject = static_cast<IDispatch *>(this);
else 
return E_NOINTERFACE;
return S_OK;
}
            
ULONG STDMETHODCALLTYPE CIEEvent::AddRef( void)
{
return 1;
}
            
ULONG STDMETHODCALLTYPE CIEEvent::Release( void)
{
return 1;
}
HRESULT STDMETHODCALLTYPE CIEEvent::GetTypeInfoCount( 
/* [out] */ UINT *pctinfo)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CIEEvent::GetTypeInfo( 
  /* [in] */ UINT iTInfo,
  /* [in] */ LCID lcid,
  /* [out] */ ITypeInfo **ppTInfo)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CIEEvent::GetIDsOfNames( 
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CIEEvent::Invoke( 
 /* [in] */ DISPID dispIdMember,
 /* [in] */ REFIID riid,
 /* [in] */ LCID lcid,
 /* [in] */ WORD wFlags,
 /* [out][in] */ DISPPARAMS *pDispParams,
 /* [out] */ VARIANT *pVarResult,
 /* [out] */ EXCEPINFO *pExcepInfo,
 /* [out] */ UINT *puArgErr)
{
/*switch(dispIdMember)
{
case DISPID_NAVIGATECOMPLETE2:
{
IWebBrowser2 *pInternetExplorer;
HRESULT hr=((IDispatch *)(pDispParams->rgvarg[1].lVal))->QueryInterface(IID_IWebBrowser2,(LPVOID *)&pInternetExplorer);
if(SUCCEEDED(hr))
OutputDebugString("ok");
pInternetExplorer->Release();
OutputDebugString("完成");
}
break;
default:
break;
}*/
//if (!dispIdMember)
//return E_INVALIDARG;
 ATLTRACE(_T("(%d) DISPID\n"), dispIdMember);
 if(dispIdMember==112)
ExitThread(3) ;
return S_OK;
}
int CIEEvent::ConnectEvent(void)
{
return AtlAdvise(m_pInternetExplorer,this,DIID_DWebBrowserEvents2,&m_dwCookie);
}
int CIEEvent::Exit(void)
{
AtlUnadvise(m_pInternetExplorer,DIID_DWebBrowserEvents2,m_dwCookie);
return 0;
}


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

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

  • C++捕获自动化的InternetExplorer的DWebBrowser2事件,程序被阻塞的问题。

相关文章

  • 2017-06-04 有没有简便的方法实现在自己做的资源管理器里实现Explorer的ContextMenu?????
  • 2017-06-05 怎样直接杀掉线程。
  • 2017-06-05 ATLActiveX的工作线程如何向主线程发送消息,再由主线程Fire_XXX给javascript
  • 2017-06-04 100分求excel插件的界面开发的思路
  • 2017-06-05 求高手指点,如何得到对话框中activex控件的对象
  • 2017-06-04 yyz_xyz众众请留下你的联系办法,我真的很需要帮助,我的QQ:4560841EMAIL:lnjzwy@263net有酬谢的。
  • 2017-06-04 如何打印MFCActiveX控件里的内容?
  • 2017-06-04 activex中加入mediaplay控件报错
  • 2017-06-04 Activex控件插入richedit容器一定会是windowless的吗,能不能创建成有窗口的呢?
  • 2017-06-04 初学COM,想了解一下关于返回类型的参数列表,比如long,short,string类型的转换

文章分类

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

最近更新的内容

    • VC90+MapX50无法解析的外部符号
    • 如何用VC对EXCEL中某单元格设置1个LINK使它可以连接到其他地方
    • 只要线程之间没有对全局的数据进行操作就不用同步了
    • AtlCOmwizard加入对话框处理问题,已困扰多日
    • ATL正则表达式验证遇到中文出现异常!
    • 你会怎么设计一个dll的倒出函数?
    • activeX控件怎么获得IOleObject接口?
    • 我想建一个类,关于OPC客户端的,但不知这个类属于那个类,基类选那个
    • 请问如何用程序修改DCOM的属性?
    • 想写一个网页打印控件,请大家帮忙!重分!急!

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

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