如何对webbrowser和IE编程(三)

IWebBrowserApp

IWebBrowserApp 接口仅仅在IE中实现。 典型的,你使用InternetExplorer 对象创建一个IE的实例. 然后你使用 IWebBrowserApp 接口操纵此实例. (今天采用IWebBrowser2 替代) IWebBrowserApp 接口继承自 IWebBrowser, 所以它提供 IWebBrowser 的全部功能。

因为IWebBrowserApp呈现一个IE窗口的实例, 所以它的方法和属性典型地允许你控制浏览器窗口的用户接口。 这些方法和属性并非包含在WebBrowser的 IWebBrowser 中的:寄宿control的应用程序提供诸如状态条, 工具条, 以及菜单条等用户接口. WebBrowser 控件仅仅用于装载web页以及其它类型文件。

IWebBrowserApp 有4个方法和10 各属性。

方法 IWebBrowserApp 接口的属性很直观立如下表, 但是有2个有理由值的讨论:GetProperty 和 PutProperty. 此两个方法允许你在IE属性包(property bag)中存储一个属性一边你能够在其后重新找回他们。 你将典型地从一个web页上存储一些状态信息到另一个web页 (事实上,使用IWebBrowser2 接口你可以在宿主一个WebBrowser 控件时候使用此方法)

Table 6-3. IWebBrowserApp  vtable 次序的方法


方法



 


描述



 


Quit

 


促使 Internet Explorer 窗口关闭。换句话讲,将自动化操作关闭 IE 实例

 


ClientToWindow

 


转换一个点从窗口坐标到客户坐标。

 


PutProperty

 


存储一个属性值到 ie 的属性包,将可以随手采用 GetProperty . 获取

 


GetProperty

 


获取先前由 PutProperty . 方法存储的属性值

 

VB代码:

InternetExplorer1.PutProperty "CurrentPicture", 10
InternetExplorer1.GetProperty("CurrentPicture")                                                    

VC++代码:

CSomeClass::PutGetProperty(VARIANT vtCurrentValue, VARIANT* vtNewValue)
{
    HRESULT hr;
    hr = m_pInternetExplorer->PutProperty(L"CurrentPicture", vtCurrentValue);

    if (SUCCEEDED(hr))
    {
        // Notice that vtNewValue is already a pointer, so you
        // don't have to pass the address to GetProperty.
        //

        hr = m_pInternetExplorer->GetProperty(L"CurrentPicture", vtNewValue);
    }

    return hr;
}

PutGetProperty 方法接受包含当前属性值的 VARIANT 变量指针且将接收属性值。

属性 IWebBrowserApp 接口有10 个属性. Table 6-4. IWebBrowserApp vtable 次序的属性


属性



 


描述



 


Name

 


返回对象的名称 t. ( 举例,当自动化 IE , Name 属性将返回 Microsoft Internet Explorer .)

 


HWND

 


返回 IE 窗口的句柄

 


FullName

 


返回 ie 可执行文件的全路径 (iexplore.exe).

 


Path

 


返回 IE 应用程序的全路径 .

 


Visible

 


监测和设置 IE 窗口是否可见。 ( 换句话讲,你可与使用此属性显示 / 隐藏 )

 


StatusBar

 


显示或者隐藏 IE 状态条,也可监测当前状态条

 


StatusText

 


设置或隐藏状态条文字

 


ToolBar

 


显示或者隐藏 IE 工具条,也可监测当前工具条状态  

 


MenuBar

 


显示或者隐藏 IE 菜单条,也可监测当前工具菜单态  

 


FullScreen

 


设置或者检测一个值指示 IE 当前是否最大化显示。最大化显示, iE 占据整个屏幕

 

Table 6-4 中的属性列表直截了当且易于使用。举例来说, 如果你想从你的Vb程序中获取IE状态条中的文字,你应当使用如下代码:

Dim strStatusText
strStatusText = InternetExplorer1.StatusText                                        

使用MFC包装类的VC++程序代码如下:

BSTR bstrStatusText;
HRESULT hr = m_pInternetExplorer->get_StatusText(&bstrStatusText);

 

 

IWebBrowser2

因为COM规则要求接口恒久不变, 要加入新的工呢高COM,你必须增加新的接口。 新的接口可扩展自其他接口已扩展功能。 举例,当心的需求引入WebBrowser 和Internet Explorer 接口, 开发者被要求建立一个新的接口: IWebBrowser2.

早期, IWebBrowser2 继承自 IWebBrowser 和 IWebBrowserApp,还提供不包含在着两个接口中的功能. 所以你应当使用IWebBrowser2 接口替代 来操纵WebBrowser 控件或者 Internet Explorer.

IWebBrowser2 接口有4个方法和8个属性.

方法     IWebBrowser2 接口方法如下描述,按照 vtable 次序, in Table 6-5.

也许IWebBrowser2 、接口踵使用最多的方法是ExecWB. 它通过WebBrowser实现了一个  IOleCommandTarget 接口的Exec的包装实现。 在 ExecWB 方法 被创建前, 你不可以直接从VB中调用IOleCommandTarget::Exec, 因为VB不可访问 IOleCommandTarget 接口 ,因而VB不可直接使用该接口的ExecWB方法。 IOleCommandTarget::Exec 方法过去大量使用,所以 WebBrowser 开发者决定创建ExecWB 以使事情变得容易。

 

Table 6-5. IWebBrowser2  Vtable 次序的方法


方法



 


描述



 


Navigate2

 


功能基于 Navigate 方法,不同在于 Navigate2 允许你导航到飞 URL 表达的地方,例如 Windows shell folder. (Windows shell folder 是指向标示符指针 , 或者 windows shell 命名空间中的 PIDL,)

 


QueryStatusWB

 


IoleCommandTarget 接口的 QueryStatus 方法在 WebBrowser. 中的包装实现

 


ExecWB

 


IoleCommandTarget 接口的 Exec 方法在 WebBrowser. 中的包装实现

 


ShowBrowserBar

 


显示或者隐藏特定的浏览器条 . 该方法仅仅用于 InternetExplorer 对象

 

 

为什么你无论如何都要调用ExecWB方法?因为它提供了你需要的功能(通过IOleCommandTarget::Exec)不是暴露于webbrowser接口。你大概疑惑于为社么开发者不实现扩展属性和方法。记住:COM规则是一旦接口发表就不可改变。所以你不能够不能增加功能而不创建新的接口。

ExecWB 方法允许WebBrowser 开发者增加新的功能而不用创建新的接口。再之, 那是由WebBrowser 通过 ExecWB 代表性的暴露不常用的工的途径, 譬如调用 Save As 对话框或者缩放web页的字体。  ExecWB 工作的方法是传递一个你想调用的command ID 和必需的参数. 太多的 command IDs ,他们包含于OLECMDID实现文档头文件he DocObj.h .

 

 

作为举例, 支持缩放web页的内容字体。Internet Explorer 允许你通过View菜单的Text Size子菜单改变字体的大小从最小到最大。 ExecWB 方法暴露了允许你改变显示在浏览器中的文字大小。对于Zoom 命令, 你可指定特殊值0123, or 4,  是最小字体 ,4是最大字体。以下举例为改变字体为最大(VB):

WebBrowser1.ExecWB OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, _CLng(4), Null

再次代码中, 我调用 ExecWB 方法, 传递OLECMDID_ZOOM 常量给第一个参数. 此常量指定 zoom 操作将被执行。 第二个参数传递给ExecWB 不要提示用户。另外的选择, 你可以提醒用户而是用OLECMDEXECOPT_PROMPTUSER. (见 DocObj.h.)

第三个输入参数指示要设定的文字尺寸。我想是文字尽可能的大,所以我指定了4 。注意我在调用中使用了VB的Clng函数包装此值,转换我指定的此值为一个variant—输入需要的类型.最后为一个输出参数包含任何返回值。因为返回值不需要关心,我传递Null.

 

 

属性 IWebBrowser2 接口有8个属性。 (Table 6-6 按照vtable次序展示其)。他们都很直观,我仅仅解释恰宏很特别的一个—AddressBar.

Table 6-6. IWebBrowser2 Properties in Vtable Order


属性



 


描述



 


ReadyState

 


返回 WebBrowser 的状态 ( 换句话讲 ,该属性指示文档是否完成装载 ). 尽管你可以使用 ReadyState 属性 , 使用DocumentComplete 时间检测文档是否装载还是比较好些。 ( 那意味着所有 HTML 和文档被装载

 


Offline

 


. 返回或者设置检测 webbrowser 是否处于脱机模式的变量

 


Silent

 


返回或设置 WebBrowser 是否处于沉默模式。如果处于沉默模式,意味着没有对话框可以被显示 .

 


RegisterAsBrowser

 


. 设置或者检测 Webbrowser 是否是作为顶层浏览器被登记

 


RegisterAsDropTarget

 


. 设置或返回 WebBrowser 是否作为导航的拖放对象 。如果登记委托放对象 , 用户可直接拖放连接到浏览器  

 


TheaterMode

 


返回或者设置 Internet Explorer 是否处于 theater 或者 normal window 模式 . 。在 theater 模式 , Internet Explorer 占据整个屏幕就像处于 FullScreen 模式,但也有最小化的用户接口元素 ( 此属性仅仅展示于 InternetExplorer 对象 )

 


AddressBar

 


显示或者隐藏地址栏 ( 此属性仅仅展示于 InternetExplorer 对象 )

 


Resizable

 


返回或者设置 Internet Explorer 是否可被调整大小 , 你可利用此属性防止用户改变 webbrowser 的大小 ( 此属性仅仅展示于InternetExplorer 对象 )

 

 

 

AddressBar 属性允许你显示/隐藏Internet Explorer 地址栏—一个包含可输入URL的文本框 允许你导航到某个Url。 能够显示或者隐藏地址条允许你完全控制你的用户的导航体验

在你的企业网络或者中小学控制用户导航体验.在此环境下,你将控制用户的导航以至于可确定某些不恰当地页面不可访问。你可创建你自己的浏览器。但是如果你没有时间和资源这么做,你可以自动化IE来代替.自动化IE允许你管掉所有的用户界面允许用户导航到某个web页,像菜单条, 工具条,以地址栏. 之后你可建立一定数量的可访问web页连接列表给用户。

 

关掉这些用户接口很容易. VB代码:

InternetExplorer1.AddressBar = False
InternetExplorer1.ToolBar = False
InternetExplorer1.MenuBar = False

时间: 2024-11-04 00:50:50

如何对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

C#编程三步走之三

编程 第三步 增加响应用户事件代码还有最后一步就可以大功告成了,就是增加一个方法来捕捉按钮点击事件.这里就是指从摄氏到华氏的按钮点击代码:private void bnCtoF_Click(Object sender, EventArgs e) {double dTempCel = 0;double dTempFah = 0;try { dTempCel = tTempCel.Text.ToDouble(); }catch(Exception) {tTempCel.Clear();tTempFa

如何对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编程(六)

使用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控件困难.你不需要实现容

Java新手入门:Java编程三十条规则

编程 1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母.例如: ThisIsAClassName thisIsMethodOrFieldName 若在定义中出现了常数初始化字符,则大写static final基本类型标识符中的所有字母.这样便可标志出它们属于编译期的常数. Java包(Package)属于一种特殊情况:它们全都是小写字母,即便中间的单词亦是如此.对于域名扩展名称,如com,org,net

转贴:msdn 访谈录之C#编程三

编程 标题    msdn 访谈录之C#编程    rainbow(翻译)关键字    C#,JEFFREY RICHTER出处    http://www.mdsn.com[TR] 程序员天地Robert Hess和Jeffrey Richter(著名的编程作家.专栏作家和咨询专家)的谈话.ROBERT HESS: 欢迎回来.我们正要涉及到有关C#编程方面的问题.为了有助于我们理解这些问题,我邀请我的好朋友Jeffery Richter到这里来.Jeffery恰好是一名撰写了很多编程书籍的程序