天天看点

WebBrowser控件使用详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinahuyong/article/details/4022770

WebBrowser控件使用详解

方法 说明

 GoBack  相当于IE的“后退”按钮,使你在当前历史列表中后退一项 

 GoForward  相当于IE的“前进”按钮,使你在当前历史列表中前进一项 

 GoHome  相当于IE的“主页”按钮,连接用户默认的主页 

 GoSearch  相当于IE的“搜索”按钮,连接用户默认的搜索页面 

 Navigate  连接到指定的URL 

 Refresh  刷新当前页面

 Refresh2  同上,只是可以指定刷新级别,所指定的刷新级别的值来自RefreshConstants枚举表,

该表定义在ExDisp.h中,可以指定的不同值如下:

REFRESH_NORMAL 执行简单的刷新,不将HTTP pragma: no-cache头发送给服务器

REFRESH_IFEXPIRED 只有在网页过期后才进行简单的刷新

REFRESH_CONTINUE 仅作内部使用。在MSDN里写着DO NOT USE! 请勿使用

REFRESH_COMPLETELY 将包含pragma: no-cache头的请求发送到服务器 

 Stop  相当于IE的“停止”按钮,停止当前页面及其内容的载入 

属性 说明

 Application  如果该对象有效,则返回掌管WebBrowser控件的应用程序实现的自动化对象(IDispatch)。如果在宿主对象中自动化对象无效,这个程序将返回WebBrowser

控件的自动化对象 

 Parent  返回WebBrowser控件的父自动化对象,通常是一个容器,例如是宿主或IE窗口 

 Container  返回WebBrowser控件容器的自动化对象。通常该值与Parent属性返回的值相同 

 Document  为活动的文档返回自动化对象。如果HTML当前正被显示在WebBrowser中,则

Document属性提供对DHTML Object Model的访问途径 

 TopLevelContainer  返回一个Boolean值,表明IE是否是WebBrowser控件顶层容器,是就返回true 

 Type  返回已被WebBrowser控件加载的对象的类型。例如:如果加载.doc文件,就会返

回Microsoft Word Document 

 Left  返回或设置WebBrowser控件窗口的内部左边与容器窗口左边的距离 

 Top  返回或设置WebBrowser控件窗口的内部左边与容器窗口顶边的距离 

 Width  返回或设置WebBrowser窗口的宽度,以像素为单位 

 Height  返回或设置WebBrowser窗口的高度,以像素为单位 

 LocationName  返回一个字符串,该字符串包含着WebBrowser当前显示的资源的名称,如果资源

是网页就是网页的标题;如果是文件或文件夹,就是文件或文件夹的名称 

 LocationURL  返回WebBrowser当前正在显示的资源的URL 

 Busy  返回一个Boolean值,说明WebBrowser当前是否正在加载URL,如果返回true

就可以使用stop方法来撤销正在执行的访问操作 

WebBrowser 的事件 

Private Events  Description 

BeforeNavigate2  导航发生前激发,刷新时不激发

CommandStateChange  当命令的激活状态改变时激发。它表明何时激活或关闭Back和Forward

菜单项或按钮 

DocumentComplete  当整个文档完成是激发,刷新页面不激发

DownloadBegin  当某项下载操作已经开始后激发,刷新也可激发此事件

DownloadComplete  当某项下载操作已经完成后激发,刷新也可激发此事件

NavigateComplete2  导航完成后激发,刷新时不激发

NewWindow2  在创建新窗口以前激发

OnFullScreen  当FullScreen属性改变时激发。该事件采用VARIENT_BOOL的一个输

入参数来指示IE是全屏显示方式(VARIENT_TRUE)还是普通显示方式(VARIENT_FALSE) 

OnMenuBar  改变MenuBar的属性时激发,标示参数是VARIENT_BOOL类型的。

VARIANT_TRUE是可见,VARIANT_ FALSE是隐藏 

OnQuit  无论是用户关闭浏览器还是开发者调用Quit方法,当IE退出时就会激发 

OnStatusBar  与OnMenuBar调用方法相同,标示状态栏是否可见。 

OnToolBar  调用方法同上,标示工具栏是否可见。

OnVisible  控制窗口的可见或隐藏,也使用一个VARIENT_BOOL类型的参数 

StatusTextChange  如果要改变状态栏中的文字,这个事件就会被激发,但它并不理会程序是否有状态栏

TitleChange  Title有效或改变时激发

一些使用技巧

1.禁止右键

看到很多关于WebBrowser控件禁止右键的提问,回复的方法很多,其中有提到使用微软提供的Webbrowser扩展COM服务器对象(WBCustomizer.dll),但是该方法在我们想使用Webbrowser编辑网页(Webbrowser1.Document.execCommand "editMode")的时候有很多弊端,比如不能显示选中的文本等。另有些方法也就不用一一列举了。

这儿我想提到的是关于MSHTML.HTMLDocument

引用Microsoft HTML OBject Library

Rem #窗体代码#

Dim WithEvents M_Dom As MSHTML.HTMLDocument

Private Function M_Dom_oncontextmenu() As Boolean

        M_Dom_oncontextmenu = False

End Function

 Private Sub Webbrowser1_DownloadComplete()

      Set M_Dom = Webbrowser1.Document

 End Sub

Rem 好了,右键菜单没有了

=========================================================================

2、控件调用和获得收藏夹里面

基本上用 specialfolder(6 ) 就可以得到收藏夹的路径, 然后你可以用dir去循环读入每个目录,然后dir里面的file, file的名字就是你要的收藏的名字, 路径可以自己根据从上面得到的路径去得到.

如果你不用dir也可以用vb的dir控件.

Private Type SHITEMID

    cb As Long

    abID As Byte

End Type

Public Type ITEMIDLIST

    mkid As SHITEMID

Public Function SpecialFolder(ByRef CSIDL As Long) As String

    'locate the favorites folder

    Dim R As Long

    Dim sPath As String

    Dim IDL As ITEMIDLIST

    Const NOERROR = 0

    Const MAX_LENGTH = 260

    R = SHGetSpecialFolderLocation(MDIMain.hwnd, CSIDL, IDL)

    If R = NOERROR Then

        sPath = Space$(MAX_LENGTH)

        R = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal sPath)

        If R Then

            SpecialFolder = Left$(sPath, InStr(sPath, vbNullChar) - 1)

        End If

    End If

=============================================================

3、全屏

是的,webbrowser本生是一个控件, 你要它全屏,就是要它所在的窗体全屏, 可以用setwindowlong取消窗体的 title, 用Call ShowWindow(FindWindow("Shell_traywnd", ""), 0) 隐藏tray,就是下边那个包含开始那一行. 用Call ShowWindow(FindWindow("Shell_traywnd", ""), 9) 恢复. 够详细了吧.

然后在form1.windowstate = 2 就可以了.

================================================================================

4、选择网页上的内容。

Private Sub Command1_Click()

'请先选中一些内容

Me.WebBrowser1.ExecWB OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT

MsgBox Clipboard.GetText

End Sub

==========================================================================

5、用IE来下载文件

Private Declare Function DoFileDownload Lib "shdocvw.dll" (ByVal lpszFile As String) As Long

   Dim sDownload As String

   sDownload = StrConv(Text1.Text, vbUnicode)

   Call DoFileDownload(sDownload)

Private Sub Form_Load()

Text1.Text = "

http://www.chat.ru/~softdaily/fo-ag162.zip

"

Form1.Caption = "Audiograbber 1.62 Full"

Text2.Text = "

http://www6.50megs.com/audiograbber/demos/cr-ag161.zip

=======================================================================

6、我要动态加载和删除WebBrowser控件应该怎么做?

   Form1.Controls.Add "shell.explorer.2", "NewWeb", Form1

    With Form1!NewWeb

        .Visible = True

        .Width = 10000

        .Height = 10000

        .Left = 0

        .Top = 0

        .Navigate2 "

www.csdn.net

    End With

Private Sub Command2_Click()

     Controls.Remove Form1!newweb

Form1.Controls.Add "shell.explorer.2", newweb(newweb.Count), Form1

    With Form1!newweb(newweb.Count)

        .Width = 1000

        .Height = 1000

        .Left = newweb(newweb.Count - 1).Left + newweb(newweb.Count - 1).Width

        '.Navigate2 "

为什么他说我

这一行错误13 类型不匹配?

ps:我在form中已经有了一个newweb(0)控件

先为一个WebBrowser

Dim i As Integer

Private Sub AddWeb_Click()

    For i = 1 To 10

        Load NewWeb(i)

        NewWeb(i).Top = i * 100

        NewWeb(i).Left = i * 100

        NewWeb(i).Visible = True

    Next i

Private Sub DelWeb_Click()

        Unload NewWeb(i)

=======================================================

7、一个把页面保存为MHT(即MHTML)文件

将 pcwak(书剑狂生[MS MVP]) 大侠提供的资料贴出来,以供大家参考:

 我终于找到一个把页面保存为MHT(即MHTML)文件的方法了!

首先,在工程中必须要引用一个库:

Library CDO

D:/WINNT/System32/cdosys.dll

Microsoft CDO for Windows 2000 Library

其次,需要Stream对应的接口的支持,如果你一时找不到就使用支持这个的较新的ADO就行了,如

Library ADODB

D:/Program Files/Common Files/system/ado/msado15.dll

Microsoft ActiveX Data Objects 2.5 Library

代码如下,十分简单(同时由于流的特点,显示在实际应用中没必要象本例中那样把文件保存到磁盘上就可直接转换为字符串或字节数组什么的处理的。

另,对于Microsoft CDO for Windows 2000 Library这个库,在WIN98中要怎么使用还没试过,感兴趣的朋友可以试试并跟帖,以丰富完善其内容:)

' Reference to Microsoft ActiveX Data Objects 2.5 Library

' Reference to Microsoft CDO for Windows 2000 Library

Dim iMsg As New CDO.Message

Dim iConf As New CDO.Configuration

Dim objStream As ADODB.Stream

With iMsg

.CreateMHTMLBody "

http://www.163.com/

";, , _

"domain/username", _

"password"

Set objStream = .GetStream

Call objStream.SaveToFile("f:/test.mht", adSaveCreateOverWrite)

End With

2、

'首先加入对ADODB和CDO(Microsoft CDO for Windows 2000 Library,对应文件名为CDOSYS.dll)的引用

    Dim message As New CDO.message

    Dim Outstream As ADODB.Stream

    On Error GoTo myerr1

    Call message.CreateMHTMLBody("

http://www.csdn.net

", CDO.CdoMHTMLFlags.cdoSuppressNone, "", "")

    Set Outstream = message.GetStream

    Call Outstream.SaveToFile("c:/test.mht", ADODB.SaveOptionsEnum.adSaveCreateOverWrite)

    MsgBox "完成"

    Exit Sub

myerr1:

    Set message = Nothing

    Set Outstream = Nothing

8、在WebBrowser控件调用收藏夹和在收藏夹里添加收藏

Option Explicit

    Dim ObjSUH As New ShellUIHelper

    ObjSUH.AddFavorite "

", "CSDN"

    Set ObjSUH = Nothing

=========================================================

9、如何使网页不出现滚动条:

Private Sub mnuScroll1_Click()

'注意:必须在网页完全显示之后才可以运行

    WebBrowser1.Document.body.Scroll = "no" '不显示滚动条的办法

Private Sub mnuScroll2_Click()

    WebBrowser1.Document.body.Scroll = "Auto" '显示滚动条的办法

 ==============================================================

10、如何获得网页中被选中部分的HTML:

    Dim objSelection

    Dim objTxtRange

    Set objSelection = WebBrowser1.Document.selection

    If Not (objSelection Is Nothing) Then

        Set objTxtRange = objSelection.createRange

        If Not (objTxtRange Is Nothing) Then

            Debug.Print objTxtRange.htmlText

            Set objTxtRange = Nothing

        Set objSelection = Nothing

    WebBrowser1.Navigate "

http://www.applevb.com

11、页面滚动:

    WebBrowser1.Document.parentwindow.scrollby 0, 30

     WebBrowser1.Navigate "

点击Command2就可以使当前页面向下滚动30像素

12、判断页面是否可以前进后退

    WebBrowser1.GoForward

    WebBrowser1.GoBack

Private Sub WebBrowser1_CommandStateChange(ByVal Command As Long, ByVal Enable As Boolean)

    If (Command = CSC_NAVIGATEBACK) Then

        Command2.Enabled = Enable

    If (Command = CSC_NAVIGATEFORWARD) Then

        Command1.Enabled = Enable

上面的command1是前进按钮,command2是后退按钮。

继续阅读