如何对webbrowser和IE编程(八)

Internet Explorer 事件

IWebBrowser2 的属性和方法给了你确切的控制导航和用户接口的途径,但是如果你不能够检测到浏览器正在处理什么以及何时处理什么,你还是没有全面的控制它.因此,WebBrowser控件和Internet Explorer暴露出事件,通过此你可以必要时监视活动以及处理某些活动. 举例来说,假设你建立一个intranet应用程序, 你想限制用户用户访问某些web页.利用Internet Explorer的时间处理句柄,你可以指令应用程序在用户试图访问受限的URL时候取消导航完成。

事件 和 引出的接口

无论何时一个COM 对象需要客户应用程序一个事件发生了, COM 对象发送一个叫做事件的消息. 发送消息的处理过程会激发一个事件. 但如果事件没有任何监听者会如何? 事件每次都发生吗? 显然, 客户应用程序监听这些事件并控制COM对象.如果一个客户应用想接收来自COM 对象的事件,它"advises" 实际的COM 对象的.

一个COM 对象为了通客户通信, 对象自身必须支持一个或者多个外引接口.一个 COM 对象支持的外引接口是作为可连接对象引用. 要成为一个可连接对象,COM对象必须实现IConnectionPointContainer 接口。通过此接口,客户可认识到那些外引接口被服务器支持. 外引接口实际通过连接点由客户挂接入COM实现。实现外引接口的客户部分众所周知是通过事件接收槽(event sink)实现的.

单一的连接点由服务器支持每一个外引接口.每一个连接点能够操纵一种类型的外引接口且至少支持IConnectionPoint 接口. 图7-1 描述了可连接的对象和它的客户之间的关系.

Figure 7-1. Connectable object and its client.

每一个服务器必须实现2个接口以便实现客户可以接收事件—IConnectionPointContainer 和 IConnectionPoint. 我们将先看看这些接口之后将检视实现事件的不同途径.

IConnectionPointContainer

每一个可连接对象实现了IConnectionPointContainer. 通过此接口, 试图接收事件的客户可找出关于可连接对象支持的不同的连接点. 通过调用QueryInterface using 客户可以获得服务器支持的任何接口的指针. (你可以使用任何接口指针调用QueryInterface, 因为全部 COM 接口继承自IUnknown.) 之后客户可以使用IConnectionPointContainer 接口的2个方法中的之一获取可连接点。 如表7-1, 获得可连接点

Table 7-1 Methods of the IConnectionPointContainer Interface


方法


描述


EnumConnectionPoints


列举可连接对象支持的全部可连接对象


FindConnectionPoint


让客户查询可连接对象关于它是否支持一个特殊接口。客户指定特殊的接口(可连接点)的接口标示 (IID) 。如果可连接对象支持此接口,返回 IConnectionPoint 接口的指针。

IConnectionPoint

一旦客户知道哪个连接点可被连接对象服务器支持, 客户就可建立同可连接对象的连接。客户通知可连接对象将要在全部事件中接收那些事件.当客户不再需要接收来自可连接对象的事件,客户解除对对象的通知. 表7-2 展示了 IConnectionPoint 接口可被客户连接的. (大多数时候,你将连接到仅仅表中头两个)

Table 7-2 Methods of the IConnectionPoint Interface


方法


描述


Advise


在客户和可连接对象的某一个可连接点间建立连接。 客户必须传递它的事件接收槽的 IUnknown 接口。 事件接收槽必须实现 IDispatch 接口以接收事件。 典型地 , 党课连接对象激发事件,可连接对象将调用 IDispatch 接口的 Invoke 方法。Advise 方法返回一个 cookie ,当客户中断连接时候,调用 Unadvise 方法时候需要携带此 cookie


Unadvise


中断连接 .


GetConnectionInterface


返回由连接点管理的外发接口的 IID . GetConnectionInterface 方法让客户将 IConnectionPoint 翻译为一个 IID.


GetConnectionPointContainer


得到刻连接对象的 IConnectionPointContainer 接口


EnumConnections


枚举刻连接对象的当前可连接点 .

接收事件的途径

依靠开发工具你创建客户应用程序,你可以接收事件通过不同的途径. 显然, 在Vb中接收事件同在VC中接收事件相比是如此不同和容易.在 C++ 应用中,你可以用不同的技术,通过使用 ATL, MFC, 或者标准C++.

Visual Basic 中接收事件

Visual Basic是创建大多数类型应用的最轻松的工具, 所以我告诉你VB是处理事件最溶的工具时也不要惊奇. ATL 和 Visual Basic 示例我们同样的工作,但是ATL花费了我4个小时, 而 Visual Basic 例子仅仅只花20 分钟.别说我错了—我是ATL, 和 MFC, C++的忠实信徒,  尤其是你建立一个接口的时候.但是 Visual Basic当建立客户应用程序从类似IE这样的服务器接收事件时是伟大的工具.

OK,如何从Visual Basic 应用程序中接收事件?当宿主WebBrowser 控件,你不必做任何特别的事. Visual Basic 在form上为WebBrowser 控件接收事件.你所需要做的全部事情就是未你要接收的任何事件创建一个事件处理句柄.

你象创建其他事件句柄一样创建句柄 (例如Form_Load event). 从Procedure下拉列表框中选择你象控制的句柄, 在事件句柄中,加入任何你型在事件激发时执行的任何代码.

当自动化服务器时候接收事件, 例如在VB应用中的Internet Explorer,过程直截了当.首先设置对服务器的类型库的引用, 你可以访问Project/References 菜单.之后,采用WithEvents 关键字声明服务器对象的变量.举例, 如果你自动化Internet Explorer, 你将声明变量如下:


下一步,采用new或者其他 关键字创建实例变量 ,如下::


或者:


当你采用以上途径生成实例接收事件, Visual Basic 自动为你初始化和管理事件接收.你不必担心连接点问题,VB为你处理它们.

在你输入建立服务器的代码之后,你插入符合服务器事件的方法调用.   举例来说, 如果你想控制由IE激活的DownloadBegin event, 你应当声明类似如下的方法声明:




当你不再想接收来自服务器的事件,简单设置变量为Nothing:


时间: 2024-10-27 12:55:51

如何对webbrowser和IE编程(八)的相关文章

如何对webbrowser和IE编程(七)

加入高级功能 本节将展示如何加入高级功能到你的应用程序或者ActiveX控件.将展示如何从一个ActiveX控件中访问Internet Explorer的 IWebBrowser2,以及如何从一个Web页面的frame中获得WebBrowser 对象.将会展示实现一些并非容易实现的功能.本节有一定难度.所有代码采用C++ 和COM实现,你应当有一定坚实的基础才可以完成本节的理解 从ActiveX 控件中访问Internet Explorer 的IWebBrowser2 在Activx控件中访问I

如何对webbrowser和IE编程(四)

寄宿WebBrowser 控件 我们现在开始在VB和VC中创建一些程序来寄宿(Host)WebBrowser控件.在你完成本部分的样本,你将对如何创建寄宿一个WebBrowser控件的应用程序又一个基本的了解.当你看到如此容易的加入Web浏览功能加入到你的应用程序,我相信你会立即开始实践的. 使用VB 在VB中,你可以在5分钟内开发一个全功能的自己的web浏览 .以下步骤为建立一个web浏览器程序: 1.     启动VB. 2.        选择" Standard EXE " ,

如何对webbrowser和IE编程(一)

一. 因为工作缘故,需要研究对 IE 编程,所以翻译了 MS 的有关资料,供参考.   IE 的体系   WebBrowser Host 首先,必须有 COM 的基础知识,因为 IE 本身就是 COM 技术的典型应用.我们看到最上层是 WebBrowser 的宿主( Host ),也就是任何你想重用(ReUse)webbrowser control 的应用程序,可以是 vb 程序,也可以是 vc 或者任何其他语言的应用程序.应用程序必须是可容纳 activex 控件的容器. Webbrowser

如何对webbrowser和IE编程(九)

接收事件的途径 依靠开发工具你创建客户应用程序,你可以接收事件通过不同的途径. 显然, 在Vb中接收事件同在VC中接收事件相比是如此不同和容易.在 C++ 应用中,你可以用不同的技术,通过使用 ATL, MFC, 或者标准C++. Visual Basic 中接收事件 Visual Basic是创建大多数类型应用的最轻松的工具, 所以我告诉你VB是处理事件最溶的工具时也不要惊奇. ATL 和 Visual Basic 示例我们同样的工作,但是ATL花费了我4个小时, 而 Visual Basic

如何对webbrowser和IE编程(十)

由Internet Explorer 5激发事件 如你所知, Internet Explorer像其他COM对象一样激发事件-通过连接点.但实际上Internet Explorer如何激发事件呢?每次 Internet Explorer需要向客户提供关于当前活动状态的信息, Internet Explorer 激发通过DWebBrowserEvents2 连接点激发一个事件. (之前到版本 4, Internet Explorer 通过 DWebBrowserEvents 接口激发事件.但到了版

如何对webbrowser和IE编程(十一)

仅仅用于Internet Explorer的事件 有些是仅仅可用于自动化 Internet Explorer,: ·         OnQuit OnVisible OnToolBar OnMenuBar OnStatusBar OnFullScreen OnTheaterMode 大多数这些事件属于浏览器用户接口. 另外一些必须要先是或者关闭Internet Explorer才发生. 一些情形中,这些事件将在你宿主webbrowser空间的时候发生. 举例来讲,当你在你的应用程序设置Menu

如何对webbrowser和IE编程(六)

使用VC++和COM API 尽管使用VC不像Vb中那么容易自动化IE,但是也不太难,尤其是你理解了CON和COM API.无论你使用MFC, ATL, 或者标准 C++自动化IE,方法都是一样-你使用COM API来实现. VC++中创建一个Internet Explorer实例包括要调用COM API CoCreateInstance ,指定第一个参数为 CLSID_InternetExplorer .创建IE自动化实例不像创建包含webbrowser的Activex控件困难.你不需要实现容

如何对webbrowser和IE编程(五)

自动化 Internet Explorer 自动化打开了开发基于web应用的世界. 它允许你使用VB或者VC定制成熟的应用.自动化的好处:通过属性和方法可以改变IE的外观:你可以提供诸如导航条等用户接口以便控制用户的导航. 自动化IE很容易.你建立一个简单的应用启动一个IE实例,然后使用控制webbrowser的途径- IWebBrowser2 接口来控制IE实例. 提醒 术语自动化( automation ) 真实的含义是通过自动化接口 -- IDispatch. 控制一个 COM 对象.但是

如何对webbrowser和IE编程(三)

IWebBrowserApp IWebBrowserApp 接口仅仅在IE中实现. 典型的,你使用InternetExplorer 对象创建一个IE的实例. 然后你使用 IWebBrowserApp 接口操纵此实例. (今天采用IWebBrowser2 替代) IWebBrowserApp 接口继承自 IWebBrowser, 所以它提供 IWebBrowser 的全部功能. 因为IWebBrowserApp呈现一个IE窗口的实例, 所以它的方法和属性典型地允许你控制浏览器窗口的用户接口. 这些