如何对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
目录
相关文章
C#编程-144:通过注册表修改IE主页
C#编程-144:通过注册表修改IE主页
C#编程-144:通过注册表修改IE主页
|
JavaScript C# 前端开发
c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2
原文:c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 可以实现例如通过应用程序操作google搜索,用户输入要搜索的内容,然后在google中搜索;可以自动点击网页上的按钮等功能     1.
2471 0
|
缓存 数据安全/隐私保护 API
|
JavaScript 程序员 前端开发
在IE下的JS编程需注意的内存释放问题
前段时间写jsfw [ JavaScript FrameWork ],写完后发现每刷新一次内存就升大几百K,用一个小时IE内存占用高到一两百M。看了以下文章,五个分类我犯了四个,问题是找到了,不过改起来很累 ---------------------------以下文章不知道是从哪Copy来的------------------- 在IE下的JS编程中,以下的编程方式都会造成即使关闭IE也无法释放内存的问题,下面分类给出:1、给DOM对象添加的属性是一个对象的引用。
809 0