9doit

Asp.net & Vb.net & 电子商务

导航

用VB.NET来做个性化浏览器

VB.NET和C#一样也没有只属于自己的类库,他们使用的类库都是.Net FrameWork SDK,在此类库中封装许多类,VB.NET就是通过这些类来突破自身语言的限制,实现很多强大功能的。其实对于.Net的编程语言来说,使用VB.NET来编写程序或者使用C#编程已经没有像以前使用VB和C++之间,有那么大的区别了,因为一般来说只要用C#能够实现的功能,同样用VB.NET也可以实现,有时使用VB.NET还显得更为方便。

虽然.Net FrameWork SDK的内容十分丰富,功能也十分强大,但有些功能使用此类库来实现就显得有点麻烦,因为在Windows里面拥有许多COM组件,充分利用这些已经存在的资源,对于快速开发程序就显得非常重要了。本文就来介绍一下,VB.NET使用COM组件来做一个属于自己的浏览器。

一. VB.NET和COM组件:

写到这里有一个概念要澄清一下,就是VB.NET和C#一样,不能直接使用已经存在的COM组件,这是因为编译VB.NET和C#的文件的时候,必须保证编译时候所使用的文件是由受管代码(Managed Code)文件,我们知道VB.NET和C#所使用的.Net FrameWork SDK都是受管代码,而对于那些COM组件来说,他们都是非受管代码(Unmanaged Code),所以这些COM组件要能够被VB.NET和C#使用,必须实现自身从非受管代码到受管代码的转换。好在,在.Net框架中提供了一个程序来专门实现这种转换,这个文件就是"Aximp.exe",如果你把.Net FrameWork SDK安装在"C"盘,那么在"C:\Program Files\Microsoft.NET\FrameworkSDK\Bin"目录中,就可以找到这个文件。

二. COM组件的转换:

在本文中所使用的COM组件的名称是微软的Web浏览器,如果你选用的操作系统是2000,并且安装的路径是"C:\Winnt",那么这个组件可以在"C:\Winnt\System32"目录中找到;如果你选用的操作系统是98,并且安装的路径是"C:\Windows",那么这个组件可以在"C:\Windows\System"目录中找到,这个COM组件的名称为"shdocvw.dll"。"Aximp.exe"是一个功能比较强大的程序,你可以通过"Aximp /?"命令,来了解他的一些其他的常规使用方法,由于在本文中只是最为简单的使用方法,所以使用下列简单的命令就可成功转换:

Aximp c:\winnt\system32\shdocvw.dll


运行上述命令后就可以实现转换,并在当前目录中产生"SHDocVw.dll"和"AxSHDocVw.dll"二个文件。具体如下图:



图01:COM组件的转换过程

在成功转换过以后,就要利用转换后的这二个文件,用VB.NET来做一个属于自己的浏览器。

三. 本文程序设计和运行的软件环境:

(1).微软公司视窗2000服务器版

(2)..Net FrameWork SDK Beta 2

四. 程序设计的思路以及关键步骤的解决方法:

(1).在VB.NET中使用浏览器组件:

在转换而成的"AxSHDocVw.dll"和"SHDocVw.dll"中定义了命名空间"AxSHDocVw",在此命名空间中封装了一个"AxWebBrowser"组件,这个组件中有若干个方法和属性,VB.NET就是通过这些方法和属性来实现浏览器的一些基本功能的。使用此浏览器组件和使用其他的WinForm组件的过程是一样的,首先要导入命名空间,然后在程序中继承此命名空间中定义的浏览器组件,最后设定这个继承后的组件的属性和方法。具体如下:

< I > .导入命名空间,具体代码如下:

Imports AxSHDocVw


< II > . 继承此命名空间中定义的浏览器组件,具体代码如下:

Friend WithEvents AxWebBrowser1 As AxSHDocVw.AxWebBrowser


(2).VB.NET实现浏览器的一些基本功能:

要用VB.NET做一个属于自己的浏览器的,就必须掌握用VB.NET是如何实现浏览器的一些基本功能的,我们所讲的浏览器的基本功能其实也就是浏览器工具栏上的那些功能按钮,譬如:前进、后退、主页、停止等,其中浏览器中最为重要,也是比较难实现的,就是如何在给定网址后,通过"转到"按钮,浏览指定的网页,下面就来具体介绍一下。

< I > .浏览指定网页:

在下列的代码中我们是通过TextBox1文本框组件来放置指定的网址的,"Button1"按钮组件就是定义的"转到"按钮,下列就是用VB.NET实现浏览指定网页的程序代码:

  Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click
Dim nullObject As System.Object = 0
    Dim str As String = ""
    Dim nullObjStr As System.Object = str
    Cursor.Current = Cursors.WaitCursor
    AxWebBrowser1.Navigate ( TextBox1.Text , nullObject , nullObjStr , nullObjStr , nullObjStr )
    Cursor.Current = Cursors.Default
  End Sub
< II > .VB.NET实现浏览器的基本功能:

在本文的程序中,我们也是仿照IE浏览器的大致式样,同样设定了一个工具栏(ToolBar1),并且在工具栏中放置了一些按钮(ToolBarButton1至ToolBarButton5),通过这些按钮来实现浏览器的前进、后退等基本功能,下列是实现这些功能的代码:

  Private Sub ToolBar1_ButtonClick ( ByVal sender As System.Object , ByVal e As ToolBarButtonClickEventArgs ) Handles ToolBar1.ButtonClick
    '实现浏览器中的"后退"功能
If e.Button Is ToolBarButton1 Then
      AxWebBrowser1.GoBack ( )
    End If
    '实现浏览器中的"前进"功能
    If e.Button Is ToolBarButton2 Then
      AxWebBrowser1.GoForward ( )
    End If
    '实现浏览器中的"主页"功能
    If e.Button Is ToolBarButton3 Then
      AxWebBrowser1.GoHome ( )
    End If
    '实现浏览器中的"刷新"功能
    If e.Button Is ToolBarButton4 Then
      AxWebBrowser1.Refresh ( )
    End If
    '实现浏览器中的"停止"功能
    If e.Button Is ToolBarButton5 Then
      AxWebBrowser1.Stop ( )
    End If
End Sub  


< III > .其实掌握了上面的这些知识,一个基本的浏览器的框架大致也就出来了,但由于浏览器页面大小是经常变化,如果你不设定窗体中的组件是跟随窗体大小变化而随之变化的话,这个做出来浏览器也就显得不那么专业,所以下面这些画龙点睛的代码也是不可缺少的。下面代码的作用是使得浏览界面上的组件随着窗体的变化而变化,即窗体中按钮和文本框等要随着窗体的变化而变化。

'定位"地址"文本框组件与窗体的下、左、右边框保持一致
    TextBox1.Anchor = ( ( ( AnchorStyles.Top Or AnchorStyles.Bottom ) _
          Or AnchorStyles.Left ) _
          Or AnchorStyles.Right ) '定位"转到"按钮组件与窗体的上、右边框保持一致
    Button1.Anchor = ( AnchorStyles.Top Or AnchorStyles.Right )
'定位"浏览器"组件与窗体的上、下、左、右边框保持一致
    AxWebBrowser1.Anchor = ( ( ( AnchorStyles.Top Or AnchorStyles.Bottom ) _
          Or AnchorStyles.Left ) _
          Or AnchorStyles.Right )  


五. 用VB.NET做浏览器的源程序代码(IE.vb):

在了解了上面的这些要点后,可以得到用VB.NET做浏览器的完整代码,具体如下:

   Imports System
Imports System.Drawing
Imports System.Collections
Imports System.ComponentModel
Imports System.Windows.Forms
Imports AxSHDocVw
'导入程序中使用到的命名空间
Public Class Form1
  Inherits Form
  Public Sub New ( )
    MyBase.New ( )
'初始化窗体中的各个组件
    InitializeComponent ( )
  End Sub
  '清除程序中使用的各种资源
  Protected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean )
    If disposing Then
      If Not ( components Is Nothing ) Then
        components.Dispose ( )
      End If
    End If
    MyBase.Dispose ( disposing )
  End Sub
  Friend WithEvents ToolBar1 As ToolBar
  Friend WithEvents ToolBarButton1 As ToolBarButton
  Friend WithEvents ToolBarButton2 As ToolBarButton
  Friend WithEvents ToolBarButton3 As ToolBarButton
  Friend WithEvents ToolBarButton4 As ToolBarButton
  Friend WithEvents ToolBarButton5 As ToolBarButton
  Friend WithEvents Label1 As Label
  Friend WithEvents TextBox1 As TextBox
  Friend WithEvents Button1 As Button
  Friend WithEvents AxWebBrowser1 As AxSHDocVw.AxWebBrowser

  Private components As System.ComponentModel.Container
  Private Sub InitializeComponent ( )
    TextBox1 = New TextBox ( )
    ToolBarButton1 = New ToolBarButton ( )
    ToolBarButton2 = New ToolBarButton ( )
    ToolBarButton3 = New ToolBarButton ( )
    ToolBarButton4 = New ToolBarButton ( )
    ToolBarButton5 = New ToolBarButton ( )
    Label1 = New Label ( )
    ToolBar1 = New ToolBar ( )
    Button1 = New Button ( )
    AxWebBrowser1 = New AxSHDocVw.AxWebBrowser ( )
    CType ( AxWebBrowser1 , System.ComponentModel.ISupportInitialize ).BeginInit ( )
    SuspendLayout ( )
'定位"地址"文本框组件与窗体的下、左、右边框保持一致
    TextBox1.Anchor = ( ( ( AnchorStyles.Top Or AnchorStyles.Bottom ) _
          Or AnchorStyles.Left ) _
          Or AnchorStyles.Right )
    TextBox1.Location = New Point ( 48 , 40 )
    TextBox1.Name = "TextBox1"
    TextBox1.Size = New Size ( 296 , 21 )
    TextBox1.TabIndex = 2
    TextBox1.Text = ""
    ToolBarButton1.Text = "向后"
    ToolBarButton3.Text = "主页"
    ToolBarButton2.Text = "向前"
ToolBarButton4.Text = "刷新"
    ToolBarButton5.Text = "停止"

Label1.Location = New Point ( 8 , 48 )
    Label1.Name = "Label1"
    Label1.Size = New Size ( 48 , 23 )
    Label1.TabIndex = 1
    Label1.Text = "地址:"
'以下是在工具栏中加入按钮
ToolBar1.Buttons.Add ( ToolBarButton1 )
ToolBar1.Buttons.Add ( ToolBarButton2 )
ToolBar1.Buttons.Add ( ToolBarButton3 )
ToolBar1.Buttons.Add ( ToolBarButton4 )
ToolBar1.Buttons.Add ( ToolBarButton5 )
    ToolBar1.DropDownArrows = True
    ToolBar1.Name = "ToolBar1"
    ToolBar1.ShowToolTips = True
    ToolBar1.Size = New Size ( 400 , 38 )
    ToolBar1.TabIndex = 0
'定位"转到"按钮组件与窗体的上、右边框保持一致
    Button1.Anchor = ( AnchorStyles.Top Or AnchorStyles.Right )
    Button1.Location = New Point ( 352 , 40 )
    Button1.Name = "Button1"
    Button1.Size = New Size ( 40 , 23 )
    Button1.TabIndex = 3
    Button1.Text = "转到"
'定位"浏览器"组件与窗体的上、下、左、右边框保持一致
    AxWebBrowser1.Anchor = ( ( ( AnchorStyles.Top Or AnchorStyles.Bottom ) _
          Or AnchorStyles.Left ) _
          Or AnchorStyles.Right )
    AxWebBrowser1.Enabled = True
    AxWebBrowser1.Location = New Point ( 0 , 64 )
    AxWebBrowser1.Size = New Size ( 400 , 240 )
    AxWebBrowser1.TabIndex = 4
    Me.AutoScaleBaseSize = New Size ( 6 , 14 )
    Me.ClientSize = New Size ( 400 , 301 )
'在窗体上加入组件
Me.Controls.Add ( AxWebBrowser1 )
Me.Controls.Add ( Button1 )
Me.Controls.Add ( TextBox1 )
Me.Controls.Add ( Label1 )
Me.Controls.Add ( ToolBar1 )
Me.Name = "Form1"
    Me.Text = "VB.NET做个性化浏览器"
    CType ( Me.AxWebBrowser1 , System.ComponentModel.ISupportInitialize ).EndInit ( )
    Me.ResumeLayout ( False )
  End Sub
  '实现浏览器的功能
  Private Sub ToolBar1_ButtonClick ( ByVal sender As System.Object , ByVal e As ToolBarButtonClickEventArgs ) Handles ToolBar1.ButtonClick
    '实现浏览器中的"后退"功能
If e.Button Is ToolBarButton1 Then
      AxWebBrowser1.GoBack ( )
    End If
    '实现浏览器中的"前进"功能
    If e.Button Is ToolBarButton2 Then
      AxWebBrowser1.GoForward ( )
    End If
    '实现浏览器中的"主页"功能
    If e.Button Is ToolBarButton3 Then
      AxWebBrowser1.GoHome ( )
    End If
    '实现浏览器中的"刷新"功能
    If e.Button Is ToolBarButton4 Then
      AxWebBrowser1.Refresh ( )
    End If
    '实现浏览器中的"停止"功能
    If e.Button Is ToolBarButton5 Then
      AxWebBrowser1.Stop ( )
    End If
  End Sub
  '实现"转到"按钮功能
  Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click
Dim nullObject As System.Object = 0
    Dim str As String = ""
    Dim nullObjStr As System.Object = str
    Cursor.Current = Cursors.WaitCursor
    AxWebBrowser1.Navigate ( TextBox1.Text , nullObject , nullObjStr , nullObjStr , nullObjStr )
    Cursor.Current = Cursors.Default
  End Sub
End Class
Module Module1
Sub Main ( )
 Application.Run ( new Form1 ( ) )
End sub
End Module  


六. 编译命令和运行界面:

在经过如下命令编译后,就可以得到可以自己的浏览器了

vbc /t:winexe /r:AxSHDocVw.dll /r:SHDocVw.dll /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll ie.cs

posted on 2005-09-27 20:55  9Doit.net  阅读(1006)  评论(0编辑  收藏  举报