• 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 > 捕获浏览器事件直接造成浏览器阻塞,大家看看咋了?

捕获浏览器事件直接造成浏览器阻塞,大家看看咋了?

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

佚名通过本文主要向大家介绍了事件冒泡和事件捕获,事件捕获,阻止事件捕获,js阻止事件捕获,js事件捕获等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 捕获浏览器事件直接造成浏览器阻塞,大家看看咋了?
描述:

自动化浏览器时出了问题,没法解决。
捕获浏览器事件直接造成浏览器阻塞,除非断开事件连接,否则浏览器无法继续运行
//iectrl.cpp
#include <windows.h>
#include ".\ieSink.h"
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
CoInitialize(NULL);
IWebBrowser2 *m_pInternetExplorer;
HRESULT hr;
CIESink ieSink;
hr=CoCreateInstance(CLSID_InternetExplorer,NULL,CLSCTX_SERVER,IID_IWebBrowser2,(LPVOID *)&m_pInternetExplorer);
m_pInternetExplorer->put_Visible(VARIANT_TRUE);
if(SUCCEEDED(hr))
{
ieSink.Connect(m_pInternetExplorer);//连接事件捕获
BSTR Url,Target,PostData,Head;
VARIANT BstrUrl,BstrTarget,IFlag,BstrPostData,BstrHead;
V_VT(&BstrUrl)=VT_BSTR;
V_BSTR(&BstrUrl)=Url=SysAllocString(L"http://www.baidu.com");
V_VT(&BstrTarget)=VT_BSTR;
V_BSTR(&BstrTarget)=Target=SysAllocString(L"_self");
V_VT(&BstrPostData)=VT_BSTR;
V_BSTR(&BstrPostData)=PostData=SysAllocString(L"_self");
V_VT(&BstrHead)=VT_BSTR;
//V_BSTR(&BstrHead)=Head=SysAllocString(L"Content-Type: application/x-www-form-urlencoded\r\n");
V_BSTR(&BstrHead)=Head=SysAllocString(L"");
V_VT(&IFlag)=VT_I4;
V_I4(&IFlag)=navNoHistory;
m_pInternetExplorer->Navigate2(&BstrUrl,&IFlag,&BstrTarget,&BstrPostData,&BstrHead);
SysFreeString(Url);
SysFreeString(Target);
SysFreeString(PostData);
SysFreeString(Head);
}
system("pause");
ieSink.DisConnect();
return TRUE;
}
//iesink.cpp
#include ".\iesink.h"
CIESink::CIESink(void)
: m_pConnectionPoint(0)
, m_dwCookie(0)
{
}
CIESink::~CIESink(void)
{
}
STDMETHODIMP_(ULONG) CIESink::AddRef()
{
return E_NOTIMPL;;
}
STDMETHODIMP_(ULONG) CIESink::Release()
{
return E_NOTIMPL;;
}
STDMETHODIMP CIESink::QueryInterface(REFIID riid, LPVOID* ppv)
{
*ppv = NULL;
if (IID_IUnknown == riid)
{
*ppv = (LPUNKNOWN)this;
return NOERROR;
}
else if (IID_IDispatch == riid)
{
*ppv = (IDispatch*)this;
return NOERROR;
}
else
return E_NOTIMPL;
}
STDMETHODIMP CIESink::Invoke(DISPID dispIdMember,
  REFIID riid,
  LCID lcid,
  WORD wFlags,
  DISPPARAMS __RPC_FAR *pDispParams,
  VARIANT __RPC_FAR *pVarResult,
  EXCEPINFO __RPC_FAR *pExcepInfo,
  UINT __RPC_FAR *puArgErr)
{
ODS("invoke\n");
return NOERROR;
}
STDMETHODIMP CIESink::Connect(IWebBrowser2 *pInternetExplorer)
{
IConnectionPointContainer *pCPContainer;
HRESULT hr=pInternetExplorer ->QueryInterface(IID_IConnectionPointContainer,(void **)&pCPContainer);
if (SUCCEEDED(hr))
{
hr=pCPContainer->FindConnectionPoint(DIID_DWebBrowserEvents2,&m_pConnectionPoint);
pCPContainer->Release();
if(SUCCEEDED(hr))
{
hr=m_pConnectionPoint->Advise(this,&m_dwCookie);
}
}
return S_OK;
}
STDMETHODIMP CIESink::DisConnect()
{
HRESULT hr = NOERROR;
if (m_pConnectionPoint)
{
if (m_dwCookie)
{
hr = m_pConnectionPoint->Unadvise(m_dwCookie);
m_dwCookie = 0;
}
 m_pConnectionPoint->Release();
 m_pConnectionPoint = NULL;
}
return NOERROR;
}
//iesink.h
#pragma once
#include "oaidl.h"
#include <ExdispID.h>
#include <Exdisp.h>
#define ODS(x) OutputDebugString(x)
class CIESink :
public IDispatch
{
public:
CIESink(void);
~CIESink(void);
// IUnknown methods
STDMETHOD(QueryInterface)(REFIID riid, LPVOID* ppv);
    STDMETHOD_(ULONG, AddRef)();
    STDMETHOD_(ULONG, Release)(); 
// IDispatch method
STDMETHOD(GetTypeInfoCount)(UINT* pctinfo)
{ ODS("GetTypeInfoCount\n"); return E_NOTIMPL; }
STDMETHOD(GetTypeInfo)(UINT iTInfo,
            LCID lcid,
            ITypeInfo** ppTInfo)
{ ODS("GetTypeInfo\n"); return E_NOTIMPL; }
STDMETHOD(GetIDsOfNames)(REFIID riid,
            LPOLESTR* rgszNames,
            UINT cNames,
            LCID lcid,
            DISPID* rgDispId)
{ ODS("GetIDsOfNames\n"); return E_NOTIMPL; }
        
STDMETHOD(Invoke)(DISPID dispIdMember,
            REFIID riid,
            LCID lcid,
            WORD wFlags,
            DISPPARAMS __RPC_FAR *pDispParams,
            VARIANT __RPC_FAR *pVarResult,
            EXCEPINFO __RPC_FAR *pExcepInfo,
            UINT __RPC_FAR *puArgErr);
    //this class
STDMETHOD(Connect)(IWebBrowser2 *pInternetExplorer);
STDMETHOD(DisConnect)();
private:
// 连接点
IConnectionPoint *m_pConnectionPoint;
DWORD m_dwCookie;
};


解决方案1:

只用在STA才需要消息循环吧,MTA不需要的
STA= single-threaded apartment
MTA= multiple-threaded apartment

解决方案2:

消息循环哪里去了


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

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

  • 捕获ie事件一问
  • 谈如何捕获OFFICE软件的事件
  • 如何捕获ie提交事件?
  • 请问如何捕获com中的事件?
  • 捕获浏览器事件直接造成浏览器阻塞,大家看看咋了?
  • 捕获IE输入筐的事件

相关文章

  • 2017-06-05 请高手帮忙啊!用事件createEvent同步,出现干扰!!!!!!!!!!
  • 2017-06-04 请问大家有什么第三方控件可以播放(vcd,dvd,rm,avi等视频格式的文件,谢谢!
  • 2017-06-05 关于ACE_Message_Block的使用//buffer+4='H';与shortmb->base+6;有什么作用呢、
  • 2017-06-05 怎样让绘制的矩形边框以1Hz频率闪烁
  • 2017-06-05 在VC中怎么调用Dll中的接口(dll是VB形式提供的)
  • 2017-06-05 如何在一个应用程序中启动和关闭另外一个应用程序,并且能够设置需要启动的应用程序的运行参数
  • 2017-06-05 如何在其他进程启动的第一时间内得到系统的通知
  • 2017-06-05 为什么需要注册dllocx等文件
  • 2017-06-05 vc能否静态调用需要lib和dll文件)C++BUILDER写的dll库,请高手给个确定的说法
  • 2017-06-04 如何将二进制数据文件显示在VC60的对话框控件中

文章分类

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

最近更新的内容

    • 如何给dll导出的函数名起别名
    • 看了二个月的ATL,还是云里雾里,气不气人?
    • 挑战!with不匪的收益!——文本压缩技术项目合作(尤其欢迎重庆地区高手)
    • BHO程序如何自动点击网页弹出的对话框
    • 请教:在一个DLL里面定义了两个CLASS,分别实现自已的接口,我如何在其中一个接口里面调用另一个类的接口?
    • 控件应用出错
    • ATL组件重新编译后,为什么运行起来还是旧版的?
    • 如何在atl的客户程序中使用activex控件?
    • 请教用IHTMLDocument获取文本内容的问题?
    • 我在vs2005写了一个activex,怎么在页面调用啊?急啊,谢谢了

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

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