如何对webbrowser和IE编程(一)_vb webbrowser internetexplorer-程序员宅基地

技术标签: 如何对webbrowser和IE编程  文档  webbrowser  编程  ie  internet  url  

 

如何对webbrowserIE编程

一、

因为工作缘故,需要研究对IE编程,所以翻译了MS的有关资料,供参考。

IE的体系

WebBrowser Host

首先,必须有COM的基础知识,因为IE本身就是COM技术的典型应用。我们看到最上层是WebBrowser的宿主(Host),也就是任何你想重用(ReUse)webbrowser control的应用程序,可以是vb程序,也可以是vc或者任何其他语言的应用程序。应用程序必须是可容纳activex控件的容器。

Webbrowser control既是activex control也是activex document 的宿主。作为控件,它可以置于任何activex容器,作为文档容器,它针对特殊的类型,调用特殊类型注册的文档server以显示文档。如果你想显示一个.doc文档,webbrowser control装载windows word,,对于html文档,webbrowser装载名为mshtml的组件(如图所示)。针对不同的文档,你不需要开发不同的应用,仅仅是调用webbrowser control即可。

Shdocvw

Shdocvw.dll包含了webbrowser control ,控制webbrowser control (就像控制其他任何activex com 控件一样),提供浏览能力给上层宿主。请注意webbrowser control位于第二级中。甚至IE也不直接而是通过shdocw.dll来使用webbrowser control的。尽管shdocvw提供了大部分的浏览功能,但是并不提供IE窗口的呈现功能。尽管如此,shdocvw还是提供了简单创建web 应用程序的能力。之后章节会讲到如何将ie的高级特性加入到你的应用程序。

MSHTML

早期的mshtml具有读取显示html的功能。MSHTML实际上是一个active 文档服务器,但是却可以作为其他控件的容器(如图中所示的)。记得吗,你可以将activex控件置于html中,此时mshtml就是一个activex宿主,还可以控制其他的控件如vbscript 脚本引擎和javascript脚本引擎,java applet ,geszhong,各种插件别意外,plug-in都是按照ie activex规范写的。

二、

WebBrowser Control Internet Explorer

二者又太多的共同点,你都是通过COM接口来访问其功能。当调用webbrowser控件时,使用的是webbrowser对象,在vc中是使用class ID CLSID_WebBrowser的接口类。

当自动化ie时,必须建立名为 InternetExplorer的对象,vc等语言中使用名为class ID CLSID_InternetExplorer的接口类。

 

接口

webbrowser4个接口(如图),其中3个提供全部的功能,第4DWebBrowserEvents2接口暴露事件

ie4 之前,仅有IwebBrowserIwebBrowserApp两个接口,且二者共享相同的功能,当开发ie4时候,决定加入第三个接口IWebBrowser2扩展webbrowser的功能。该接口派生于第二个接口。

IWebBrowser

IWebBrowser 仅仅是WebBrowser control的最初接口, 提供基本的例如导航web页面的功能。 作为其他派生接口的基础接口,有8个方法和30个属性。

方法

 描述

GoBack

导航到历史列表中的上一个页面

GoForward

导航到历史历表中的下一个项目                             

GoHome

导航到缺省页面.

GoSearch

导航到缺省搜索页面

Navigate

导航到一个页面或者页面

Refresh

刷新当前页面

Refresh2

可以选择刷新级别,如下:

REFRESH_NORMAL 普通刷新,并且不发送HTTP pragma:nocache 到服务器.

REFRESH_IFEXPIRED 仅仅当页面失效时才发送刷新请求

REFRESH_CONTINUE 内部使用,不要在编程时使用

REFRESH_COMPLETELY 发送HTTP pragma:nocache header 到服务器

Stop

停止当前导航

尽管WebBrowser control 提供了你需要的导航回退以及前向的方法,但是没有提供存取历史列表的途径. 你可与直接通过属性LocationUR来获取当前页的URL.

VB或者VC++中调用GoBack GoForward 方法式很容易的.你可以使用WebBrowser control 或者 Internet Explorer对象. 举例来讲, 在VB中你可以如下调用:

WebBrowser1.GoBack           ' Hosting WebBrowser control
InternetExplorer1.GoForward  ' Automating Internet Explorer object

VC++中如下:

m_webBrowser.GoBack();            // Hosting WebBrowser control
m_pInternetExplorer->GoForward(); // Automating Internet Explorer object

尽管 GoBack GoForward  方法十分重要,当控制WebBrowser control或者自动化操作 Internet Explorer, Navigate is 却是最重要的方法. Navigate 允许你导航到特定的你所想的web页或者文件. Navigate 带有5个参数, 允许你指定特定的URL以实现导航以及其他定义导航行为的信息.

第一个参数是 URL, 指示web页的位置和名称或者何处的文件你想装载。 (次擦书类型是 BSTR.) URL 可以是你所使用的标准URL 协议类型的一种,例如HTTP 和 FILE, 或者是全路经文件名的本地文件系统, 例如 C:/MyFile.htm.

第二个参数, Flags, 你可指定如何或者甚至何处装载特定的URL. (参数的类型是指向 VARIANT的指针) Flags 的值来自名为 BrowserNavConstants 的枚举类型 ,定义于 ExDisp.h 头文件中且有6个值, 详细解释见下列表. 你可以指定一个或者多个Flags 参数值 (请留意有些当前并未实现).

·         navOpenInNewWindow. 将导致一个新的窗口打开以显示URL. 缺省,如果你在自己的应用程序中控制 WebBrowser control,这些值将导致新的 Internet Explorer 浏览器窗口打开.

  • navNoHistory. 指定此URL将不加入到URL历史列表中
  • navNoReadFromCache. 当前未实现.
  • navNoWriteToCache. 当前未实现.
  • navAllowAutoSearch. 如果指定的URL未找到,自动搜索功能将试图导航到通常的顶级域名如.com .net .org以找到正确的URL。如果失败, URL将传递给搜索引擎.
  • navBrowserBar. 如果可能,将 URL 装入到 Explorer 的地址栏Bar

第三个参数 TargetFrameName. 指定web页的哪一个frame将会发生导航. (参数的类型是指向 VARIANT的指针)此字符串将为以存在于web页中的名字或者一个指定的值如 _top_search.  _top 值指定 URL 将被当前最顶层web页装入并不在任何一个当前页中存在的frame.  _search 指示搜索面板将被打开. (该值仅在你自动化操控Internet Explorer时发生.) 如果你指定的frame名称并未发现,, 新的Internet Explorer 窗口将被打开。

你可以使用 PostData 参数 (第四个)通过HTTPpost事务将指定特定的数据发送到服务器. (参数的类型是指向 VARIANT的指针) Post 处理用于将在HTML表单收集的数据发送到服务器。如果此参数不指定任何数据 ,  Navigate 方法将使用Get方法. 另外,如果你不指定 HTTP 协议的URL (换句话讲,如果你指定例如 FILE 协议的 URL), PostData 参数将被忽略。

你也可以使用第五个参数 , Headers, 以发送 HTTP 头信息到服务器 . (T 参数的类型是指向 VARIANT 的指针 ) 这些加入的头信息将被 WebBrowser 控件如常发送出去 . 作为 PostData 参数 , 如果你并不指定第一个参数 , Headers 将被忽略 .
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bird207/article/details/2661981

智能推荐

【机械臂】解决在Rviz、gazebo仿真中模型显示不出的问题_fixed frame [map] does not exist-程序员宅基地

文章浏览阅读2.2k次,点赞36次,收藏25次。sw导出urdf文件之后,将urdf文件夹复制到Ros工作空间中(home/catkin_ws/src/),然后运行。roslaunch gluon display.launch是具体的运行命令,里面的gluon需要替换成你自己SW导出urdf的文件夹名称。工作空间中加入新的工程之后最好都配置一遍环境,不然在conda环境下会报错,或者直接退出conda环境来运行也可以,终端输入conda deactivate退出conda环境就好。_fixed frame [map] does not exist

RCNN基础知识-程序员宅基地

文章浏览阅读366次,点赞7次,收藏9次。3.将特征向量进行二分类,使用SVM,即Supported Vector Machine支持向量机的算法,得到得分矩阵。通过NMS非极大值抑制Non Maxinum Supress迭代选择当前置信度得分最高的候选框,设置一个阈值,若该候选框与其他候选框的IOU交并比大于阈值则去除其他候选框。预测得到的候选框和真实的框可能还有较小的差异,将这种差异视为线性的,即对预测框平移和缩放就能与真实框重合。1.对图像进行选择性搜索得到候选区域,并使用crop+wrap的方法将大小修正为统一值。

API接口技术开发1688阿里巴巴alibabaAPI请求按关键词搜索商品详情数据、页码、宝贝数量、返回数量等参数可支持高并发调用接入演示_alibaba同义词库 三方接口-程序员宅基地

文章浏览阅读368次,点赞6次,收藏8次。请注意,由于1688的API可能会有调用频率的限制,因此在高并发场景下,你可能需要实现更复杂的逻辑来管理API密钥和访问令牌,以及处理API请求的排队和重试机制。此外,如果1688开放平台有提供特定的SDK,可以使用SDK来简化开发过程。_alibaba同义词库 三方接口

通用计算机(PC)和手机是否属于嵌入式设备?(嵌入式的定义)-杂谈_手机是嵌入式设备-程序员宅基地

文章浏览阅读9.3k次,点赞18次,收藏33次。我们身边的很大一部分电子产品,其实都可以称之为嵌入式设备。(除去一些简单的收音机,普通的耳机和音响,普通充电插座,功能单一的读卡器U盘之类的,较为简单的不带控制功能的产品外。它们可以可以称为电子产品,但不属于嵌入式。普通电子产品和嵌入式设备可以通过“是否带可编程的控制芯片”来进行区分。)但对于电脑和手机是否属于嵌入式设备,网上的讨论比较多,说法比较多,疑惑也比较多。这篇文章我就想聊聊这个话题。(行文中为了保持通俗易懂,部分比喻与说法难免不甚严谨。若是有特别荒谬的原则性错误,望斧正。)在这里有很大一._手机是嵌入式设备

W10系统matlab无法保存对该路径的更改 pathdef_MATLAB的运行与窗口介绍-程序员宅基地

文章浏览阅读2.4k次。1.首先打开MATLAB软件:MATLAB在安装中如果没有选择在桌面生成快捷方式,则需要去安装目录下自己查找,具体路径如下图:2.运行MATLAB运行MATLAB软件,打开后界面如下图所示:此为MATLAB软件的主界面,主要分为上图中的6个部分:菜单栏/工具栏工作目录工作目录中的文件目录目录窗口工作区命令历史记录3.菜单栏/工具栏的介绍对于菜单栏/工具栏来讲,主要有三个选项卡,如图中红色..._matlab无法保存对该路径的更改 pathdef

【配电网重构】基于SOE算法的多时段随机配电网重构方法【IEEE33节点、IEEE84节点】(Matlab代码实现)_ieee65节点-程序员宅基地

文章浏览阅读430次。配电网重构(DNR)的目的是确定配电网的最优拓扑结构,是降低电网功率损耗的有效措施。电力负荷需求和光伏(PV)输出是不确定的,并随时间变化,将影响最佳网络拓扑结构。单小时确定性DNR无法处理这种不确定性和可变性。为此,本文提出了求解多小时随机DNR (SDNR)的方法。现有的DNR求解方法要么不准确,要么过于耗时,因此无法求解大型配电网的多小时sdnr。为此,提出了一种开关开交换(SOE)方法。从所有开关关闭的环路网络开始,SOE由三个步骤组成。第一步是依次打开开关,直到打开所有循环。_ieee65节点

随便推点

Xcode 9.0 报错, Safe Area Layout Guide Before IOS 9.0_:vqo-0v-avf: error: content and frame layout guide-程序员宅基地

文章浏览阅读5w次,点赞3次,收藏5次。Xcode 9.0 新建工程报错xcode Safe Area Layout Guide Before IOS 9.0xcode 9更新玩一个最简单的页面看看iPhone X有多丑 ,结果直接报错 Safe Area Layout Guide Before IOS 9.0xcode 很不给面子解决如下_:vqo-0v-avf: error: content and frame layout guides before ios 11.0

C语言——贪吃蛇(详解)_c语言贪吃蛇-程序员宅基地

文章浏览阅读1.5k次,点赞25次,收藏28次。背景音乐播放贪吃蛇地图的打印吃食物边长贪吃蛇的移动计算得分撞墙与撞自身结束游戏并打开原神相关网站贪吃蛇的加速减速暂停游戏Win32 API 中有许多函数,我们今天将会学习里面的几种函数以帮助我们实现贪吃蛇小游戏//蛇身结点的定义int x;int y;到这里,我们的贪吃蛇就完结,撒花啦!各位如果要看总代码的话,可以点开下方我的gitee如果各位喜欢的话,希望可以多多支持!!!_c语言贪吃蛇

Python3下机器学习实战KNN代码出现AttributeError: ‘dict’ object has no attribute错误_python 'dict' object has no attribute 'model_name_-程序员宅基地

文章浏览阅读4.8w次,点赞10次,收藏10次。错误显示:AttributeError: 'dict' object has no attribute 'iteritems'之所以会出现上述错误是因为python3中已经没有这个属性,直接改为items即可。_python 'dict' object has no attribute 'model_name_or_path

快速理解复杂系统组成学习内容整合-程序员宅基地

文章浏览阅读1.5w次,点赞23次,收藏17次。复杂系统是由多个相互关联、相互作用的组件组成的大型系统,通过这些组件的协同工作来完成特定的任务或提供特定的服务。在设计复杂系统时,通常会考虑以下五个关键模块:接入系统 (Access System)+应用系统 (Application System)+基础平台 (Foundation Platform)+中间件 (Abundant External Middleware)+支撑系统 (Supporting System)_复杂系统组成

WIN7服务器配置之MySQL数据库安装图解(适用于5.1,5.5的版本)_win7 mysql 管理器-程序员宅基地

文章浏览阅读1.5k次。我用的mysql-5.5.9-win32.msi版本的,你可以从这里下载5.5最新版本的,安装和配置都是一样的,关于其中一些版本的区别:The Essentials Package:不包含 embedded server and benchmark suite,有自动安装程序和配置向导,没有MySQL Documentation;The Complete Package:包含 embedded_win7 mysql 管理器

工厂设计模式-程序员宅基地

文章浏览阅读5.4k次,点赞5次,收藏13次。1、概念工厂模式分三种:简单工厂模式、工厂方法模式、抽象工厂模式简单工厂模式(Simple Factory Pattern):属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式严重违背了“开闭原则”,难以拓展。工厂方法模式(Factory Method):定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为_工厂设计模式

推荐文章

热门文章

相关标签