Click here to Skip to main content
11,478,873 members (64,017 online)
Click here to Skip to main content
Add your own
alternative version

Convert any URL to a MHTML archive using native .NET code

, 3 Apr 2005 381.9K 3.8K 158
A native .NET class for saving URLs: text-only, HTML page, HTML archive, or HTML complete.
Imports System.IO
Imports System.Text.RegularExpressions

''' <remarks>
'''   Jeff Atwood
'''   http://www.codinghorror.com/
''' </remarks>
Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call
        TextEncodingComboBox.SelectedIndex = 0
        MemoryRadioButton.Checked = True
        BrowserIdTextBox.Text = _mht.BrowserIdString
    End Sub

    'Form overrides dispose to clean up the component list.
    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

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Friend WithEvents Button1 As System.Windows.Forms.Button
    Friend WithEvents TabControl1 As System.Windows.Forms.TabControl
    Friend WithEvents TabPage1 As System.Windows.Forms.TabPage
    Friend WithEvents TabPage2 As System.Windows.Forms.TabPage
    Friend WithEvents TabPage3 As System.Windows.Forms.TabPage
    Friend WithEvents TabPage4 As System.Windows.Forms.TabPage
    Friend WithEvents Label3 As System.Windows.Forms.Label
    Friend WithEvents Label4 As System.Windows.Forms.Label
    Friend WithEvents Label5 As System.Windows.Forms.Label
    Friend WithEvents CompleteFileTextBox As System.Windows.Forms.TextBox
    Friend WithEvents HtmlFileTextBox As System.Windows.Forms.TextBox
    Friend WithEvents TextFileTextBox As System.Windows.Forms.TextBox
    Friend WithEvents ViewCompleteButton As System.Windows.Forms.Button
    Friend WithEvents ViewHtmlButton As System.Windows.Forms.Button
    Friend WithEvents SaveHtmlButton As System.Windows.Forms.Button
    Friend WithEvents ViewTextButton As System.Windows.Forms.Button
    Friend WithEvents SaveTextButton As System.Windows.Forms.Button
    Friend WithEvents BuildFileButton As System.Windows.Forms.Button
    Friend WithEvents IFrameCheckBox As System.Windows.Forms.CheckBox
    Friend WithEvents ScriptCheckBox As System.Windows.Forms.CheckBox
    Friend WithEvents Label7 As System.Windows.Forms.Label
    Friend WithEvents TextEncodingComboBox As System.Windows.Forms.ComboBox
    Friend WithEvents TabControl2 As System.Windows.Forms.TabControl
    Friend WithEvents TabPage5 As System.Windows.Forms.TabPage
    Friend WithEvents TabPage6 As System.Windows.Forms.TabPage
    Friend WithEvents ViewMhtButton As System.Windows.Forms.Button
    Friend WithEvents Label2 As System.Windows.Forms.Label
    Friend WithEvents MhtFileTextBox As System.Windows.Forms.TextBox
    Friend WithEvents BuildMhtButton As System.Windows.Forms.Button
    Friend WithEvents MemoryRadioButton As System.Windows.Forms.RadioButton
    Friend WithEvents DiskTempRadioButton As System.Windows.Forms.RadioButton
    Friend WithEvents Label6 As System.Windows.Forms.Label
    Friend WithEvents DiskPermRadioButton As System.Windows.Forms.RadioButton
    Friend WithEvents BuildMhtMemoryButton As System.Windows.Forms.Button
    Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox
    Friend WithEvents ViewUrlButton As System.Windows.Forms.Button
    Friend WithEvents UrlTextBox As System.Windows.Forms.TextBox
    Friend WithEvents ProxyAuthCheckBox As System.Windows.Forms.CheckBox
    Friend WithEvents AuthCheckBox As System.Windows.Forms.CheckBox
    Friend WithEvents ProxyUrlTextBox As System.Windows.Forms.TextBox
    Friend WithEvents Label1 As System.Windows.Forms.Label
    Friend WithEvents ProxyUserTextBox As System.Windows.Forms.TextBox
    Friend WithEvents ProxyPasswordTextBox As System.Windows.Forms.TextBox
    Friend WithEvents Label8 As System.Windows.Forms.Label
    Friend WithEvents Label9 As System.Windows.Forms.Label
    Friend WithEvents Label10 As System.Windows.Forms.Label
    Friend WithEvents Label11 As System.Windows.Forms.Label
    Friend WithEvents AuthPasswordTextBox As System.Windows.Forms.TextBox
    Friend WithEvents AuthUserTextBox As System.Windows.Forms.TextBox
    Friend WithEvents Label12 As System.Windows.Forms.Label
    Friend WithEvents Label13 As System.Windows.Forms.Label
    Friend WithEvents RecursionCheckBox As System.Windows.Forms.CheckBox
    Friend WithEvents BrowserIdTextBox As System.Windows.Forms.TextBox
    Friend WithEvents Label14 As System.Windows.Forms.Label
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.Button1 = New System.Windows.Forms.Button
        Me.TabControl1 = New System.Windows.Forms.TabControl
        Me.TabPage1 = New System.Windows.Forms.TabPage
        Me.TabControl2 = New System.Windows.Forms.TabControl
        Me.TabPage5 = New System.Windows.Forms.TabPage
        Me.ViewMhtButton = New System.Windows.Forms.Button
        Me.Label2 = New System.Windows.Forms.Label
        Me.MhtFileTextBox = New System.Windows.Forms.TextBox
        Me.BuildMhtButton = New System.Windows.Forms.Button
        Me.MemoryRadioButton = New System.Windows.Forms.RadioButton
        Me.DiskTempRadioButton = New System.Windows.Forms.RadioButton
        Me.Label6 = New System.Windows.Forms.Label
        Me.DiskPermRadioButton = New System.Windows.Forms.RadioButton
        Me.TabPage6 = New System.Windows.Forms.TabPage
        Me.BuildMhtMemoryButton = New System.Windows.Forms.Button
        Me.TabPage3 = New System.Windows.Forms.TabPage
        Me.ViewHtmlButton = New System.Windows.Forms.Button
        Me.Label4 = New System.Windows.Forms.Label
        Me.HtmlFileTextBox = New System.Windows.Forms.TextBox
        Me.SaveHtmlButton = New System.Windows.Forms.Button
        Me.TabPage2 = New System.Windows.Forms.TabPage
        Me.ViewCompleteButton = New System.Windows.Forms.Button
        Me.BuildFileButton = New System.Windows.Forms.Button
        Me.Label3 = New System.Windows.Forms.Label
        Me.CompleteFileTextBox = New System.Windows.Forms.TextBox
        Me.TabPage4 = New System.Windows.Forms.TabPage
        Me.ViewTextButton = New System.Windows.Forms.Button
        Me.Label5 = New System.Windows.Forms.Label
        Me.TextFileTextBox = New System.Windows.Forms.TextBox
        Me.SaveTextButton = New System.Windows.Forms.Button
        Me.IFrameCheckBox = New System.Windows.Forms.CheckBox
        Me.ScriptCheckBox = New System.Windows.Forms.CheckBox
        Me.Label7 = New System.Windows.Forms.Label
        Me.TextEncodingComboBox = New System.Windows.Forms.ComboBox
        Me.GroupBox1 = New System.Windows.Forms.GroupBox
        Me.Label13 = New System.Windows.Forms.Label
        Me.Label12 = New System.Windows.Forms.Label
        Me.Label10 = New System.Windows.Forms.Label
        Me.Label11 = New System.Windows.Forms.Label
        Me.AuthPasswordTextBox = New System.Windows.Forms.TextBox
        Me.AuthUserTextBox = New System.Windows.Forms.TextBox
        Me.Label9 = New System.Windows.Forms.Label
        Me.Label8 = New System.Windows.Forms.Label
        Me.ProxyPasswordTextBox = New System.Windows.Forms.TextBox
        Me.ProxyUserTextBox = New System.Windows.Forms.TextBox
        Me.Label1 = New System.Windows.Forms.Label
        Me.ProxyUrlTextBox = New System.Windows.Forms.TextBox
        Me.ProxyAuthCheckBox = New System.Windows.Forms.CheckBox
        Me.AuthCheckBox = New System.Windows.Forms.CheckBox
        Me.ViewUrlButton = New System.Windows.Forms.Button
        Me.UrlTextBox = New System.Windows.Forms.TextBox
        Me.RecursionCheckBox = New System.Windows.Forms.CheckBox
        Me.BrowserIdTextBox = New System.Windows.Forms.TextBox
        Me.Label14 = New System.Windows.Forms.Label
        Me.TabControl1.SuspendLayout()
        Me.TabPage1.SuspendLayout()
        Me.TabControl2.SuspendLayout()
        Me.TabPage5.SuspendLayout()
        Me.TabPage6.SuspendLayout()
        Me.TabPage3.SuspendLayout()
        Me.TabPage2.SuspendLayout()
        Me.TabPage4.SuspendLayout()
        Me.GroupBox1.SuspendLayout()
        Me.SuspendLayout()
        '
        'Button1
        '
        Me.Button1.Location = New System.Drawing.Point(216, 492)
        Me.Button1.Name = "Button1"
        Me.Button1.TabIndex = 9
        Me.Button1.Text = "Button1"
        '
        'TabControl1
        '
        Me.TabControl1.Controls.Add(Me.TabPage1)
        Me.TabControl1.Controls.Add(Me.TabPage3)
        Me.TabControl1.Controls.Add(Me.TabPage2)
        Me.TabControl1.Controls.Add(Me.TabPage4)
        Me.TabControl1.Location = New System.Drawing.Point(12, 368)
        Me.TabControl1.Name = "TabControl1"
        Me.TabControl1.SelectedIndex = 0
        Me.TabControl1.Size = New System.Drawing.Size(440, 176)
        Me.TabControl1.TabIndex = 12
        '
        'TabPage1
        '
        Me.TabPage1.Controls.Add(Me.TabControl2)
        Me.TabPage1.Location = New System.Drawing.Point(4, 22)
        Me.TabPage1.Name = "TabPage1"
        Me.TabPage1.Size = New System.Drawing.Size(432, 150)
        Me.TabPage1.TabIndex = 0
        Me.TabPage1.Text = "Single File Web Archive"
        '
        'TabControl2
        '
        Me.TabControl2.Appearance = System.Windows.Forms.TabAppearance.Buttons
        Me.TabControl2.Controls.Add(Me.TabPage5)
        Me.TabControl2.Controls.Add(Me.TabPage6)
        Me.TabControl2.Dock = System.Windows.Forms.DockStyle.Fill
        Me.TabControl2.Location = New System.Drawing.Point(0, 0)
        Me.TabControl2.Name = "TabControl2"
        Me.TabControl2.SelectedIndex = 0
        Me.TabControl2.Size = New System.Drawing.Size(432, 150)
        Me.TabControl2.TabIndex = 30
        '
        'TabPage5
        '
        Me.TabPage5.Controls.Add(Me.ViewMhtButton)
        Me.TabPage5.Controls.Add(Me.Label2)
        Me.TabPage5.Controls.Add(Me.MhtFileTextBox)
        Me.TabPage5.Controls.Add(Me.BuildMhtButton)
        Me.TabPage5.Controls.Add(Me.MemoryRadioButton)
        Me.TabPage5.Controls.Add(Me.DiskTempRadioButton)
        Me.TabPage5.Controls.Add(Me.Label6)
        Me.TabPage5.Controls.Add(Me.DiskPermRadioButton)
        Me.TabPage5.Location = New System.Drawing.Point(4, 25)
        Me.TabPage5.Name = "TabPage5"
        Me.TabPage5.Size = New System.Drawing.Size(424, 121)
        Me.TabPage5.TabIndex = 0
        Me.TabPage5.Text = "On Disk"
        '
        'ViewMhtButton
        '
        Me.ViewMhtButton.Enabled = False
        Me.ViewMhtButton.Location = New System.Drawing.Point(352, 88)
        Me.ViewMhtButton.Name = "ViewMhtButton"
        Me.ViewMhtButton.Size = New System.Drawing.Size(60, 23)
        Me.ViewMhtButton.TabIndex = 32
        Me.ViewMhtButton.Text = "View"
        '
        'Label2
        '
        Me.Label2.AutoSize = True
        Me.Label2.Location = New System.Drawing.Point(0, 4)
        Me.Label2.Name = "Label2"
        Me.Label2.Size = New System.Drawing.Size(266, 16)
        Me.Label2.TabIndex = 31
        Me.Label2.Text = "Filename to generate, or target folder to generate to:"
        '
        'MhtFileTextBox
        '
        Me.MhtFileTextBox.Location = New System.Drawing.Point(0, 24)
        Me.MhtFileTextBox.Multiline = True
        Me.MhtFileTextBox.Name = "MhtFileTextBox"
        Me.MhtFileTextBox.Size = New System.Drawing.Size(416, 32)
        Me.MhtFileTextBox.TabIndex = 30
        Me.MhtFileTextBox.Text = ""
        '
        'BuildMhtButton
        '
        Me.BuildMhtButton.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.BuildMhtButton.Location = New System.Drawing.Point(288, 88)
        Me.BuildMhtButton.Name = "BuildMhtButton"
        Me.BuildMhtButton.Size = New System.Drawing.Size(60, 23)
        Me.BuildMhtButton.TabIndex = 29
        Me.BuildMhtButton.Text = "Save"
        '
        'MemoryRadioButton
        '
        Me.MemoryRadioButton.Location = New System.Drawing.Point(88, 60)
        Me.MemoryRadioButton.Name = "MemoryRadioButton"
        Me.MemoryRadioButton.Size = New System.Drawing.Size(64, 24)
        Me.MemoryRadioButton.TabIndex = 33
        Me.MemoryRadioButton.Text = "Memory"
        '
        'DiskTempRadioButton
        '
        Me.DiskTempRadioButton.Location = New System.Drawing.Point(152, 60)
        Me.DiskTempRadioButton.Name = "DiskTempRadioButton"
        Me.DiskTempRadioButton.Size = New System.Drawing.Size(112, 24)
        Me.DiskTempRadioButton.TabIndex = 34
        Me.DiskTempRadioButton.Text = "Disk, Temporary"
        '
        'Label6
        '
        Me.Label6.Location = New System.Drawing.Point(4, 64)
        Me.Label6.Name = "Label6"
        Me.Label6.Size = New System.Drawing.Size(80, 16)
        Me.Label6.TabIndex = 36
        Me.Label6.Text = "Temp Storage:"
        '
        'DiskPermRadioButton
        '
        Me.DiskPermRadioButton.Location = New System.Drawing.Point(264, 60)
        Me.DiskPermRadioButton.Name = "DiskPermRadioButton"
        Me.DiskPermRadioButton.Size = New System.Drawing.Size(112, 24)
        Me.DiskPermRadioButton.TabIndex = 35
        Me.DiskPermRadioButton.Text = "Disk, Permanent"
        '
        'TabPage6
        '
        Me.TabPage6.Controls.Add(Me.BuildMhtMemoryButton)
        Me.TabPage6.Location = New System.Drawing.Point(4, 25)
        Me.TabPage6.Name = "TabPage6"
        Me.TabPage6.Size = New System.Drawing.Size(424, 121)
        Me.TabPage6.TabIndex = 1
        Me.TabPage6.Text = "In Memory"
        '
        'BuildMhtMemoryButton
        '
        Me.BuildMhtMemoryButton.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.BuildMhtMemoryButton.Location = New System.Drawing.Point(280, 88)
        Me.BuildMhtMemoryButton.Name = "BuildMhtMemoryButton"
        Me.BuildMhtMemoryButton.Size = New System.Drawing.Size(132, 23)
        Me.BuildMhtMemoryButton.TabIndex = 30
        Me.BuildMhtMemoryButton.Text = "Display"
        '
        'TabPage3
        '
        Me.TabPage3.Controls.Add(Me.ViewHtmlButton)
        Me.TabPage3.Controls.Add(Me.Label4)
        Me.TabPage3.Controls.Add(Me.HtmlFileTextBox)
        Me.TabPage3.Controls.Add(Me.SaveHtmlButton)
        Me.TabPage3.Location = New System.Drawing.Point(4, 22)
        Me.TabPage3.Name = "TabPage3"
        Me.TabPage3.Size = New System.Drawing.Size(432, 150)
        Me.TabPage3.TabIndex = 2
        Me.TabPage3.Text = "Web Page (html only)"
        '
        'ViewHtmlButton
        '
        Me.ViewHtmlButton.Enabled = False
        Me.ViewHtmlButton.Location = New System.Drawing.Point(360, 112)
        Me.ViewHtmlButton.Name = "ViewHtmlButton"
        Me.ViewHtmlButton.Size = New System.Drawing.Size(60, 23)
        Me.ViewHtmlButton.TabIndex = 24
        Me.ViewHtmlButton.Text = "View"
        '
        'Label4
        '
        Me.Label4.AutoSize = True
        Me.Label4.Location = New System.Drawing.Point(8, 8)
        Me.Label4.Name = "Label4"
        Me.Label4.Size = New System.Drawing.Size(266, 16)
        Me.Label4.TabIndex = 23
        Me.Label4.Text = "Filename to generate, or target folder to generate to:"
        '
        'HtmlFileTextBox
        '
        Me.HtmlFileTextBox.Location = New System.Drawing.Point(8, 24)
        Me.HtmlFileTextBox.Multiline = True
        Me.HtmlFileTextBox.Name = "HtmlFileTextBox"
        Me.HtmlFileTextBox.Size = New System.Drawing.Size(416, 80)
        Me.HtmlFileTextBox.TabIndex = 22
        Me.HtmlFileTextBox.Text = ""
        '
        'SaveHtmlButton
        '
        Me.SaveHtmlButton.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.SaveHtmlButton.Location = New System.Drawing.Point(296, 112)
        Me.SaveHtmlButton.Name = "SaveHtmlButton"
        Me.SaveHtmlButton.Size = New System.Drawing.Size(60, 23)
        Me.SaveHtmlButton.TabIndex = 21
        Me.SaveHtmlButton.Text = "Save"
        '
        'TabPage2
        '
        Me.TabPage2.Controls.Add(Me.ViewCompleteButton)
        Me.TabPage2.Controls.Add(Me.BuildFileButton)
        Me.TabPage2.Controls.Add(Me.Label3)
        Me.TabPage2.Controls.Add(Me.CompleteFileTextBox)
        Me.TabPage2.Location = New System.Drawing.Point(4, 22)
        Me.TabPage2.Name = "TabPage2"
        Me.TabPage2.Size = New System.Drawing.Size(432, 150)
        Me.TabPage2.TabIndex = 1
        Me.TabPage2.Text = "Web Page (complete)"
        '
        'ViewCompleteButton
        '
        Me.ViewCompleteButton.Enabled = False
        Me.ViewCompleteButton.Location = New System.Drawing.Point(360, 112)
        Me.ViewCompleteButton.Name = "ViewCompleteButton"
        Me.ViewCompleteButton.Size = New System.Drawing.Size(60, 23)
        Me.ViewCompleteButton.TabIndex = 22
        Me.ViewCompleteButton.Text = "View"
        '
        'BuildFileButton
        '
        Me.BuildFileButton.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.BuildFileButton.Location = New System.Drawing.Point(296, 112)
        Me.BuildFileButton.Name = "BuildFileButton"
        Me.BuildFileButton.Size = New System.Drawing.Size(60, 23)
        Me.BuildFileButton.TabIndex = 21
        Me.BuildFileButton.Text = "Save"
        '
        'Label3
        '
        Me.Label3.AutoSize = True
        Me.Label3.Location = New System.Drawing.Point(8, 8)
        Me.Label3.Name = "Label3"
        Me.Label3.Size = New System.Drawing.Size(266, 16)
        Me.Label3.TabIndex = 20
        Me.Label3.Text = "Filename to generate, or target folder to generate to:"
        '
        'CompleteFileTextBox
        '
        Me.CompleteFileTextBox.Location = New System.Drawing.Point(8, 24)
        Me.CompleteFileTextBox.Multiline = True
        Me.CompleteFileTextBox.Name = "CompleteFileTextBox"
        Me.CompleteFileTextBox.Size = New System.Drawing.Size(416, 80)
        Me.CompleteFileTextBox.TabIndex = 19
        Me.CompleteFileTextBox.Text = ""
        '
        'TabPage4
        '
        Me.TabPage4.Controls.Add(Me.ViewTextButton)
        Me.TabPage4.Controls.Add(Me.Label5)
        Me.TabPage4.Controls.Add(Me.TextFileTextBox)
        Me.TabPage4.Controls.Add(Me.SaveTextButton)
        Me.TabPage4.Location = New System.Drawing.Point(4, 22)
        Me.TabPage4.Name = "TabPage4"
        Me.TabPage4.Size = New System.Drawing.Size(432, 150)
        Me.TabPage4.TabIndex = 3
        Me.TabPage4.Text = "Text"
        '
        'ViewTextButton
        '
        Me.ViewTextButton.Enabled = False
        Me.ViewTextButton.Location = New System.Drawing.Point(360, 112)
        Me.ViewTextButton.Name = "ViewTextButton"
        Me.ViewTextButton.Size = New System.Drawing.Size(60, 23)
        Me.ViewTextButton.TabIndex = 24
        Me.ViewTextButton.Text = "View"
        '
        'Label5
        '
        Me.Label5.AutoSize = True
        Me.Label5.Location = New System.Drawing.Point(8, 8)
        Me.Label5.Name = "Label5"
        Me.Label5.Size = New System.Drawing.Size(266, 16)
        Me.Label5.TabIndex = 23
        Me.Label5.Text = "Filename to generate, or target folder to generate to:"
        '
        'TextFileTextBox
        '
        Me.TextFileTextBox.Location = New System.Drawing.Point(8, 24)
        Me.TextFileTextBox.Multiline = True
        Me.TextFileTextBox.Name = "TextFileTextBox"
        Me.TextFileTextBox.Size = New System.Drawing.Size(416, 80)
        Me.TextFileTextBox.TabIndex = 22
        Me.TextFileTextBox.Text = ""
        '
        'SaveTextButton
        '
        Me.SaveTextButton.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.SaveTextButton.Location = New System.Drawing.Point(296, 112)
        Me.SaveTextButton.Name = "SaveTextButton"
        Me.SaveTextButton.Size = New System.Drawing.Size(60, 23)
        Me.SaveTextButton.TabIndex = 21
        Me.SaveTextButton.Text = "Save"
        '
        'IFrameCheckBox
        '
        Me.IFrameCheckBox.Location = New System.Drawing.Point(172, 272)
        Me.IFrameCheckBox.Name = "IFrameCheckBox"
        Me.IFrameCheckBox.Size = New System.Drawing.Size(152, 24)
        Me.IFrameCheckBox.TabIndex = 23
        Me.IFrameCheckBox.Text = "Remove <IFRAME> tags"
        '
        'ScriptCheckBox
        '
        Me.ScriptCheckBox.Location = New System.Drawing.Point(12, 272)
        Me.ScriptCheckBox.Name = "ScriptCheckBox"
        Me.ScriptCheckBox.Size = New System.Drawing.Size(148, 24)
        Me.ScriptCheckBox.TabIndex = 22
        Me.ScriptCheckBox.Text = "Remove <SCRIPT> tags"
        '
        'Label7
        '
        Me.Label7.Location = New System.Drawing.Point(12, 336)
        Me.Label7.Name = "Label7"
        Me.Label7.Size = New System.Drawing.Size(80, 16)
        Me.Label7.TabIndex = 29
        Me.Label7.Text = "Text Encoding:"
        '
        'TextEncodingComboBox
        '
        Me.TextEncodingComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
        Me.TextEncodingComboBox.Items.AddRange(New Object() {"Autodetect", "Unicode", "Windows-1252", "UTF-8"})
        Me.TextEncodingComboBox.Location = New System.Drawing.Point(100, 332)
        Me.TextEncodingComboBox.Name = "TextEncodingComboBox"
        Me.TextEncodingComboBox.Size = New System.Drawing.Size(136, 21)
        Me.TextEncodingComboBox.TabIndex = 30
        '
        'GroupBox1
        '
        Me.GroupBox1.Controls.Add(Me.Label13)
        Me.GroupBox1.Controls.Add(Me.Label12)
        Me.GroupBox1.Controls.Add(Me.Label10)
        Me.GroupBox1.Controls.Add(Me.Label11)
        Me.GroupBox1.Controls.Add(Me.AuthPasswordTextBox)
        Me.GroupBox1.Controls.Add(Me.AuthUserTextBox)
        Me.GroupBox1.Controls.Add(Me.Label9)
        Me.GroupBox1.Controls.Add(Me.Label8)
        Me.GroupBox1.Controls.Add(Me.ProxyPasswordTextBox)
        Me.GroupBox1.Controls.Add(Me.ProxyUserTextBox)
        Me.GroupBox1.Controls.Add(Me.Label1)
        Me.GroupBox1.Controls.Add(Me.ProxyUrlTextBox)
        Me.GroupBox1.Controls.Add(Me.ProxyAuthCheckBox)
        Me.GroupBox1.Controls.Add(Me.AuthCheckBox)
        Me.GroupBox1.Controls.Add(Me.ViewUrlButton)
        Me.GroupBox1.Controls.Add(Me.UrlTextBox)
        Me.GroupBox1.Location = New System.Drawing.Point(4, 4)
        Me.GroupBox1.Name = "GroupBox1"
        Me.GroupBox1.Size = New System.Drawing.Size(452, 244)
        Me.GroupBox1.TabIndex = 33
        Me.GroupBox1.TabStop = False
        Me.GroupBox1.Text = "Target URL"
        '
        'Label13
        '
        Me.Label13.Location = New System.Drawing.Point(224, 192)
        Me.Label13.Name = "Label13"
        Me.Label13.Size = New System.Drawing.Size(128, 32)
        Me.Label13.TabIndex = 48
        Me.Label13.Text = "(leave blank to use current user credentials)"
        '
        'Label12
        '
        Me.Label12.Location = New System.Drawing.Point(224, 84)
        Me.Label12.Name = "Label12"
        Me.Label12.Size = New System.Drawing.Size(128, 32)
        Me.Label12.TabIndex = 47
        Me.Label12.Text = "(leave blank to use current user credentials)"
        '
        'Label10
        '
        Me.Label10.Location = New System.Drawing.Point(36, 104)
        Me.Label10.Name = "Label10"
        Me.Label10.Size = New System.Drawing.Size(64, 16)
        Me.Label10.TabIndex = 46
        Me.Label10.Text = "password:"
        '
        'Label11
        '
        Me.Label11.Location = New System.Drawing.Point(36, 80)
        Me.Label11.Name = "Label11"
        Me.Label11.Size = New System.Drawing.Size(64, 16)
        Me.Label11.TabIndex = 45
        Me.Label11.Text = "user:"
        '
        'AuthPasswordTextBox
        '
        Me.AuthPasswordTextBox.Location = New System.Drawing.Point(108, 104)
        Me.AuthPasswordTextBox.Name = "AuthPasswordTextBox"
        Me.AuthPasswordTextBox.TabIndex = 44
        Me.AuthPasswordTextBox.Text = ""
        '
        'AuthUserTextBox
        '
        Me.AuthUserTextBox.Location = New System.Drawing.Point(108, 80)
        Me.AuthUserTextBox.Name = "AuthUserTextBox"
        Me.AuthUserTextBox.TabIndex = 43
        Me.AuthUserTextBox.Text = ""
        '
        'Label9
        '
        Me.Label9.Location = New System.Drawing.Point(36, 212)
        Me.Label9.Name = "Label9"
        Me.Label9.Size = New System.Drawing.Size(64, 16)
        Me.Label9.TabIndex = 42
        Me.Label9.Text = "password:"
        '
        'Label8
        '
        Me.Label8.Location = New System.Drawing.Point(36, 188)
        Me.Label8.Name = "Label8"
        Me.Label8.Size = New System.Drawing.Size(64, 16)
        Me.Label8.TabIndex = 41
        Me.Label8.Text = "user:"
        '
        'ProxyPasswordTextBox
        '
        Me.ProxyPasswordTextBox.Location = New System.Drawing.Point(108, 212)
        Me.ProxyPasswordTextBox.Name = "ProxyPasswordTextBox"
        Me.ProxyPasswordTextBox.TabIndex = 40
        Me.ProxyPasswordTextBox.Text = ""
        '
        'ProxyUserTextBox
        '
        Me.ProxyUserTextBox.Location = New System.Drawing.Point(108, 188)
        Me.ProxyUserTextBox.Name = "ProxyUserTextBox"
        Me.ProxyUserTextBox.TabIndex = 39
        Me.ProxyUserTextBox.Text = ""
        '
        'Label1
        '
        Me.Label1.Location = New System.Drawing.Point(36, 164)
        Me.Label1.Name = "Label1"
        Me.Label1.Size = New System.Drawing.Size(64, 16)
        Me.Label1.TabIndex = 38
        Me.Label1.Text = "proxy URL:"
        '
        'ProxyUrlTextBox
        '
        Me.ProxyUrlTextBox.Location = New System.Drawing.Point(108, 164)
        Me.ProxyUrlTextBox.Name = "ProxyUrlTextBox"
        Me.ProxyUrlTextBox.Size = New System.Drawing.Size(332, 20)
        Me.ProxyUrlTextBox.TabIndex = 37
        Me.ProxyUrlTextBox.Text = ""
        '
        'ProxyAuthCheckBox
        '
        Me.ProxyAuthCheckBox.Location = New System.Drawing.Point(16, 136)
        Me.ProxyAuthCheckBox.Name = "ProxyAuthCheckBox"
        Me.ProxyAuthCheckBox.Size = New System.Drawing.Size(268, 24)
        Me.ProxyAuthCheckBox.TabIndex = 36
        Me.ProxyAuthCheckBox.Text = "To get to this URL, we must go through a proxy:"
        '
        'AuthCheckBox
        '
        Me.AuthCheckBox.Location = New System.Drawing.Point(16, 52)
        Me.AuthCheckBox.Name = "AuthCheckBox"
        Me.AuthCheckBox.Size = New System.Drawing.Size(188, 24)
        Me.AuthCheckBox.TabIndex = 35
        Me.AuthCheckBox.Text = "This URL requires authentication"
        '
        'ViewUrlButton
        '
        Me.ViewUrlButton.Location = New System.Drawing.Point(384, 52)
        Me.ViewUrlButton.Name = "ViewUrlButton"
        Me.ViewUrlButton.Size = New System.Drawing.Size(60, 23)
        Me.ViewUrlButton.TabIndex = 34
        Me.ViewUrlButton.Text = "View"
        '
        'UrlTextBox
        '
        Me.UrlTextBox.Location = New System.Drawing.Point(8, 24)
        Me.UrlTextBox.Name = "UrlTextBox"
        Me.UrlTextBox.Size = New System.Drawing.Size(436, 20)
        Me.UrlTextBox.TabIndex = 33
        Me.UrlTextBox.Text = "http://www.codinghorror.com/blog/"
        '
        'RecursionCheckBox
        '
        Me.RecursionCheckBox.Checked = True
        Me.RecursionCheckBox.CheckState = System.Windows.Forms.CheckState.Checked
        Me.RecursionCheckBox.Location = New System.Drawing.Point(12, 252)
        Me.RecursionCheckBox.Name = "RecursionCheckBox"
        Me.RecursionCheckBox.Size = New System.Drawing.Size(324, 20)
        Me.RecursionCheckBox.TabIndex = 34
        Me.RecursionCheckBox.Text = "Allow recursive file retrieval (eg, <FRAME> and <IFRAME>)"
        '
        'BrowserIdTextBox
        '
        Me.BrowserIdTextBox.Location = New System.Drawing.Point(100, 308)
        Me.BrowserIdTextBox.Name = "BrowserIdTextBox"
        Me.BrowserIdTextBox.Size = New System.Drawing.Size(352, 20)
        Me.BrowserIdTextBox.TabIndex = 35
        Me.BrowserIdTextBox.Text = ""
        '
        'Label14
        '
        Me.Label14.Location = New System.Drawing.Point(12, 312)
        Me.Label14.Name = "Label14"
        Me.Label14.Size = New System.Drawing.Size(64, 16)
        Me.Label14.TabIndex = 43
        Me.Label14.Text = "Browser ID:"
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(460, 553)
        Me.Controls.Add(Me.Label14)
        Me.Controls.Add(Me.BrowserIdTextBox)
        Me.Controls.Add(Me.RecursionCheckBox)
        Me.Controls.Add(Me.GroupBox1)
        Me.Controls.Add(Me.TextEncodingComboBox)
        Me.Controls.Add(Me.Label7)
        Me.Controls.Add(Me.IFrameCheckBox)
        Me.Controls.Add(Me.ScriptCheckBox)
        Me.Controls.Add(Me.TabControl1)
        Me.Controls.Add(Me.Button1)
        Me.Name = "Form1"
        Me.Text = "MhtBuilder Demo Form"
        Me.TabControl1.ResumeLayout(False)
        Me.TabPage1.ResumeLayout(False)
        Me.TabControl2.ResumeLayout(False)
        Me.TabPage5.ResumeLayout(False)
        Me.TabPage6.ResumeLayout(False)
        Me.TabPage3.ResumeLayout(False)
        Me.TabPage2.ResumeLayout(False)
        Me.TabPage4.ResumeLayout(False)
        Me.GroupBox1.ResumeLayout(False)
        Me.ResumeLayout(False)

    End Sub

#End Region

    Private _mht As New Mht.Builder    

    Private Sub BuildMhtButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BuildMhtButton.Click
        Cursor.Current = Cursors.WaitCursor

        Dim st As Mht.Builder.FileStorage
        If MemoryRadioButton.Checked Then
            st = Mht.Builder.FileStorage.Memory
        End If
        If DiskTempRadioButton.Checked Then
            st = Mht.Builder.FileStorage.DiskTemporary
        End If
        If DiskPermRadioButton.Checked Then
            st = Mht.Builder.FileStorage.DiskPermanent
        End If        

        MhtFileTextBox.Text = _mht.SavePageArchive(MhtFileTextBox.Text, st, UrlTextBox.Text)
        Cursor.Current = Cursors.Default
        ViewMhtButton.Enabled = True
    End Sub

    Private Sub BuildMhtMemoryButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BuildMhtMemoryButton.Click
        Cursor.Current = Cursors.WaitCursor
        Dim f As New Form2
        f.Data = _mht.GetPageArchive(UrlTextBox.Text)
        f.ShowDialog(Me)
        Cursor.Current = Cursors.Default
    End Sub

    Private Sub BuildFileButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BuildFileButton.Click
        Cursor.Current = Cursors.WaitCursor
        CompleteFileTextBox.Text = _mht.SavePageComplete(CompleteFileTextBox.Text, UrlTextBox.Text)
        Cursor.Current = Cursors.Default
        ViewCompleteButton.Enabled = True
    End Sub

    Private Sub SaveHtmlButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveHtmlButton.Click
        Cursor.Current = Cursors.WaitCursor
        HtmlFileTextBox.Text = _mht.SavePage(HtmlFileTextBox.Text, UrlTextBox.Text)
        Cursor.Current = Cursors.Default
        ViewHtmlButton.Enabled = True
    End Sub

    Private Sub SaveTextButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveTextButton.Click
        _mht.Url = UrlTextBox.Text

        Cursor.Current = Cursors.WaitCursor
        TextFileTextBox.Text = _mht.SavePageText(TextFileTextBox.Text)
        Cursor.Current = Cursors.Default
        ViewTextButton.Enabled = True
    End Sub

    '--
    '-- removes all unsafe characters to form a valid filename
    '--
    Private Function MakeSafeFilename(ByVal strAny As String) As String
        strAny = Regex.Replace(strAny, "^http://|/$", "", RegexOptions.IgnoreCase)
        Return Regex.Replace(strAny, "[\/\\\:\*\?\""\<\>\|]", "_")
    End Function

    '--
    '-- auto-generate filenames for each textbox based on the URL
    '--
    Private Sub AutoGenerateFilename()
        Dim strSafeName As String
        strSafeName = AppDomain.CurrentDomain.BaseDirectory
        MhtFileTextBox.Text = strSafeName
        HtmlFileTextBox.Text = strSafeName
        CompleteFileTextBox.Text = strSafeName
        TextFileTextBox.Text = strSafeName
    End Sub

    Private Sub UrlTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
        AutoGenerateFilename()
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AutoGenerateFilename()
    End Sub

    Private Sub ViewUrlButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        System.Diagnostics.Process.Start(UrlTextBox.Text)
    End Sub

    Private Sub ViewFileButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ViewMhtButton.Click
        System.Diagnostics.Process.Start(MhtFileTextBox.Text)
    End Sub

    Private Sub ViewHtmlButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ViewHtmlButton.Click
        System.Diagnostics.Process.Start(HtmlFileTextBox.Text)
    End Sub

    Private Sub ViewCompleteButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ViewCompleteButton.Click
        System.Diagnostics.Process.Start(CompleteFileTextBox.Text)
    End Sub

    Private Sub ViewTextButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ViewTextButton.Click
        System.Diagnostics.Process.Start(TextFileTextBox.Text)
    End Sub

    Private Sub ScriptCheckBox_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ScriptCheckBox.CheckedChanged
        _mht.StripScripts = ScriptCheckBox.Checked
    End Sub

    Private Sub IFrameCheckBox_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles IFrameCheckBox.CheckedChanged
        _mht.StripIframes = IFrameCheckBox.Checked
    End Sub

    Private Sub TextEncodingComboBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextEncodingComboBox.SelectedIndexChanged
        Select Case TextEncodingComboBox.SelectedItem.ToString
            Case "Autodetect"
                _mht.TextEncoding = Nothing
            Case "Unicode"
                _mht.TextEncoding = System.Text.Encoding.Unicode
            Case Else
                _mht.TextEncoding = System.Text.Encoding.UTF8
        End Select
    End Sub

    Private Sub AuthCheckBox_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AuthCheckBox.CheckedChanged
        _mht.AuthenticationRequired = AuthCheckBox.Checked
    End Sub

    Private Sub ProxyAuthCheckBox_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProxyAuthCheckBox.CheckedChanged
        _mht.ProxyAuthenticationRequired = ProxyAuthCheckBox.Checked
    End Sub

    Private Sub ProxyUrlTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProxyUrlTextBox.TextChanged
        ProxyAuthCheckBox.Checked = (ProxyUrlTextBox.Text <> "")
        _mht.ProxyUrl = ProxyUrlTextBox.Text
    End Sub

    Private Sub ProxyUserTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProxyUserTextBox.TextChanged
        _mht.ProxyUser = ProxyUserTextBox.Text
    End Sub

    Private Sub ProxyPasswordTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProxyPasswordTextBox.TextChanged
        _mht.ProxyPassword = ProxyPasswordTextBox.Text
    End Sub

    Private Sub AuthPasswordTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AuthPasswordTextBox.TextChanged
        _mht.AuthenticationPassword = AuthPasswordTextBox.Text
    End Sub

    Private Sub AuthUserTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AuthUserTextBox.TextChanged
        _mht.AuthenticationUser = AuthUserTextBox.Text
    End Sub

    Private Sub RecursionCheckBox_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RecursionCheckBox.CheckedChanged
        _mht.AllowRecursiveFileRetrieval = RecursionCheckBox.Checked
    End Sub

    Private Sub BrowserIdTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BrowserIdTextBox.TextChanged
        _mht.BrowserIdString = BrowserIdTextBox.Text
    End Sub
End Class

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

wumpus1
Web Developer
United States United States
My name is Jeff Atwood. I live in Berkeley, CA with my wife, two cats, and far more computers than I care to mention. My first computer was the Texas Instruments TI-99/4a. I've been a Microsoft Windows developer since 1992; primarily in VB. I am particularly interested in best practices and human factors in software development, as represented in my recommended developer reading list. I also have a coding and human factors related blog at www.codinghorror.com.

| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.150520.1 | Last Updated 4 Apr 2005
Article Copyright 2004 by wumpus1
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid