履歴とHTMLソース取得について・・・

タグの編集
投稿者 Fox  (高校生) 投稿日時 2012/1/22 20:55:48
いつもお世話になっています。

現在作成中のブラウザなのですがほぼ完成してきました。
そこでお気に入りの取得はできました。
履歴の取得とソースの取得をしたいと思っています。

まずForm2のWebBrowserの中に履歴を表示しておきます。
履歴を探していきたいサイトをダブルクリックしたらForm1のタブ型ブラウザに表示されるようにしたいです。

それとForm1の選択しているタブページのサイトのソースをForm3のリッチテキストボックスに表示したいです。

言葉がおかしかったらすいません。
投稿者 ラオシス  (中学生) 投稿日時 2012/1/22 21:13:58
>まずForm2のWebBrowserの中に履歴を表示しておきます。
履歴表示でしたら、次の2つが考えられますが・・・
1.Google Chromeのように動的にサイトを作成し、履歴を表示する
2.IE,Operaのようにツリービューに表示させる。
のうちどれでしょうか?
多分前の質問で言ったと思いますが、履歴等の記録の場合はシリアライズが一番手っ取り早そうです。

>それとForm1の選択しているタブページのサイトのソースをForm3のリッチテキストボックスに表示したいです。
http://blog.livedoor.jp/akf0/archives/51396485.html

補足ですが、Form等のクラスはわかりやすいように名前を変更した方がいいですよ^^
投稿者 Fox  (高校生) 投稿日時 2012/1/23 04:00:26
お気に入りはこのようなコードを書いています。
Option Strict On
Imports System.Runtime.InteropServices
Public Class Form2
    Private WithEvents view As Shell32.ShellFolderView

    Private Enum FOLDERVIEWMODE As UInteger
        FVM_ICON = 1UI
        FVM_SMALLICON = 2UI
        FVM_LIST = 3UI
        FVM_DETAILS = 4UI
        FVM_THUMBNAIL = 5UI
        FVM_TILE = 6UI
        FVM_THUMBSTRIP = 7UI
    End Enum


    Private Sub Form2_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load
        WebBrowser1.Navigate(System.Environment.GetFolderPath(Environment.SpecialFolder.Favorites))

    End Sub
    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As ObjectByVal e As  _
      WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        view = DirectCast(CallByName(WebBrowser1.ActiveXInstance, "Document", CallType.Get),  _
          Shell32.ShellFolderView)
        view.CurrentViewMode = FOLDERVIEWMODE.FVM_LIST
    End Sub

    Private Function view_DefaultVerbInvoked() As Boolean Handles view.DefaultVerbInvoked
        Dim fvi1 As Shell32.FolderItems = Nothing
        Dim fi As Shell32.FolderItem = Nothing
        Dim sl As Shell32.ShellLinkObject = Nothing
        Try
            fvi1 = DirectCast(view.SelectedItems, Shell32.FolderItems)
            If fvi1 IsNot Nothing Then
                fi = fvi1.Item(0)
                If fi.IsLink Then
                    sl = TryCast(fi.GetLink, Shell32.ShellLinkObject)
                    CType(Form1.TabControl1.SelectedTab.Controls.Item(0), WebBrowser).Navigate(sl.Path)
                    Me.Close()
                ElseIf fi.IsFolder Then
                    CallByName(WebBrowser1.ActiveXInstance, "Navigate2", CallType.Method, fi)
                End If
                Return False
            End If
        Catch ex As Exception
            Trace.WriteLine(ex.Message)
        Finally
            ReleaseComObject(sl)
            ReleaseComObject(fi)
            ReleaseComObject(fvi1)
        End Try
        Return True

    End Function

    Private Function view_BeginDrag() As Boolean Handles view.BeginDrag
        Return True
    End Function

    Private Sub view_EnumDone() Handles view.EnumDone
    End Sub

    Private Sub view_SelectionChanged() Handles view.SelectionChanged
    End Sub

    Private Function view_VerbInvoked() As Boolean Handles view.VerbInvoked
        Return True
    End Function

    Private Sub ReleaseComObject(Of T)(ByRef o As T)
        If o IsNot Nothing Then
            If Marshal.IsComObject(o) Then
                Marshal.ReleaseComObject(o)
            End If
            o = Nothing
        End If
    End Sub

End Class


こんな感じで履歴できないでしょうか?

ソースの取得がよくわからないです。
VB2010を使っています。
投稿者 ラオシス  (中学生) 投稿日時 2012/1/23 17:03:41
>ソースの取得がよくわからないです。
URLをはったページ見ましたか?
何か不都合な点があるのでしょうか?

TreeViewということですね。
簡単なサンプルを書いてきます。
投稿者 ラオシス  (中学生) 投稿日時 2012/1/23 23:15:35
今日中に終わりそうにないため、途中までのコードをアップしておきます。
HistryListクラス

Imports System
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Binary
<Serializable()>
Public Class HistoryList
    Private _Items As New List(Of History)

    Public Property Today As Date

    Public Sub New()
        Today = New Date(Now.Hour, Now.Month, Now.Day)
    End Sub

    Public Property Items As List(Of History)
        Get
            Return _Items
        End Get
        Set(value As List(Of History))
            _Items = value
        End Set
    End Property

    Public Sub WriteFile()
        Dim bf As New BinaryFormatter
        Using fs As New FileStream(CreatePath(Today), FileMode.Create)
            bf.Serialize(fs, Me)
        End Using
    End Sub

    '読み込み 
    Public Shared Function ReadFile(ByVal readdate As DateAs HistoryList
        Dim Result As HistoryList
        Dim bf As New BinaryFormatter
        If Not My.Computer.FileSystem.FileExists(CreatePath(readdate)) Then
            Return Nothing
        End If

        Using fs As New FileStream(CreatePath(readdate), FileMode.Open)
            Result = bf.Deserialize(fs)
        End Using
        Return Result
    End Function

    'ファイル名生成 
    Public Shared Function CreateFileName(ByVal filedate As Date)
        Return filedate.ToString("yyyyMMDD") & ".xml"
    End Function

    '保存先作成 
    Public Shared Function CreatePath(ByVal filedate As Date)
        Return Application.StartupPath & "\" & CreateFileName(filedate)
    End Function
End Class


Histryクラス

<Serializable()>
Public Class History
    Public Title As String
    Public URL As String
    Public ViewDate As Date
End Class

あとは呼び出し元のForm1クラスを完成させるだけです・・・。
HistryList.Items.ViewDateプロパティと、HistryList.Todayプロパティが
異ならないようにしないといけないので、そこは呼び出し元で処理しようと思います。
例外が発生できればいいんですが。Listクラスに委譲しているのでめんどくさいです。
投稿者 ラオシス  (中学生) 投稿日時 2012/1/24 19:08:13
分割(1)
Form1.vb
WebBrowser、TreeView、TextBox(URL入力用)、Buttonを設置してください。
Public Class Form1
    Private TodayHistoryList As New HistoryList
    Private YesterDayHistoryList As New HistoryList
    Private ParentToday, ParentYesterDay As TreeNode

    Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        TodayHistoryList.WriteFile()
        YesterDayHistoryList.WriteFile()
    End Sub
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'TreeViewの初期化 
        InitTreeView()

        '今日 
        TodayHistoryList = HistoryList.ReadFile(Today)
        If Not IsNothing(TodayHistoryList) Then
            TodayHistoryList.TreeViewColumnsAdd(ParentToday)
        Else
            TodayHistoryList = New HistoryList
        End If

        '昨日 
        YesterDayHistoryList = HistoryList.ReadFile(Today.AddDays(-1))
        If Not IsNothing(YesterDayHistoryList) Then
            YesterDayHistoryList.TreeViewColumnsAdd(ParentYesterDay)
        Else
            YesterDayHistoryList = New HistoryList With {.day = Today.AddDays(-1)}
        End If
    End Sub

    Private Sub WebBrowser1_DocumentCompleted(sender As System.Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        Dim NowDate As Date = Today
        '現在の日付と今日の日付が違う場合(日付が変更された) 
        If NowDate <> TodayHistoryList.day Then
            YesterDayHistoryList.WriteFile()
            TodayHistoryList.WriteFile()
            Call Form1_Load(NothingNothing)
        End If

        TodayHistoryList.TreeViewHistoryListColumnAdd(ParentToday, New History With {.Title = WebBrowser1.DocumentTitle,
                                                    .URL = WebBrowser1.Url.AbsoluteUri,
                                                    .ViewDate = Now})
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        WebBrowser1.Navigate(TextBox1.Text)
    End Sub
    Private Sub InitTreeView()
        TreeView1.Nodes.Clear()
        ParentToday = New TreeNode("今日")
        ParentYesterDay = New TreeNode("昨日")
        TreeView1.Nodes.Add(ParentToday)
        TreeView1.Nodes.Add(ParentYesterDay)
    End Sub

    Private Sub TreeView1_DoubleClick(sender As System.Object, e As System.EventArgs) Handles TreeView1.DoubleClick
        WebBrowser1.Navigate(DirectCast(TreeView1.SelectedNode, HistoryTreeViewNode).History.URL)
    End Sub
End Class
Public Class HistoryTreeViewNode
    Inherits TreeNode
    Public Property History As History
End Class



投稿者 ラオシス  (中学生) 投稿日時 2012/1/24 19:19:08
分割(2)
Imports System
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Binary
<Serializable()>
Public Class HistoryList
    Private _Items As New List(Of History)

    Public Property day As Date = Today

    Public Sub New()

    End Sub

    Public Property Items As List(Of History)
        Get
            Return _Items
        End Get
        Set(value As List(Of History))
            _Items = value
        End Set
    End Property

    Public Sub WriteFile()
        Dim bf As New BinaryFormatter
        Using fs As New FileStream(CreatePath(day), FileMode.Create)
            bf.Serialize(fs, Me)
        End Using
    End Sub

    '読み込み 
    Public Shared Function ReadFile(ByVal readdate As DateAs HistoryList
        Dim Result As HistoryList
        Dim bf As New BinaryFormatter
        If Not My.Computer.FileSystem.FileExists(CreatePath(readdate)) Then
            Return Nothing
        End If

        Using fs As New FileStream(CreatePath(readdate), FileMode.Open)
            Result = bf.Deserialize(fs)
        End Using
        Return Result
    End Function

    'ファイル名生成 
    Public Shared Function CreateFileName(ByVal filedate As Date)
        Return filedate.ToString("yyyy-MM-dd") & ".bin"
    End Function

    '保存先作成 
    Public Shared Function CreatePath(ByVal filedate As Date)
        Return Application.StartupPath & "\" & CreateFileName(filedate)
    End Function

    'TreeNodeに全項目追加 
    Public Sub TreeViewColumnsAdd(ByVal Parent As TreeNode)
        For Each index In Items
            Parent.Nodes.Add(New HistoryTreeViewNode() With {.History = index, .Text = index.Title})
        Next
    End Sub
    'TreeNodeに項目を追加するとともに、自分のクラスにも追加 
    Public Sub TreeViewHistoryListColumnAdd(ByVal Parent As TreeNode, ByVal History As History)
        If Me.Items.Last.URL = History.URL Then
            Return
        End If
        Parent.Nodes.Add(New HistoryTreeViewNode() With {.History = History, .Text = History.Title})
        Me.Items.Add(History)
    End Sub
End Class

おそらくバグがありそうなので発見次第つぶしていってください。あくまでもサンプルなので・・・。
Historyクラスは変更ないので、昨日のをそのまま使ってください。
履歴はその日のDateのyyyy-MM-dd.binという名前で保存してあります。
これで分割終わりです。長文失礼しました。
もっと効率的な方法がありそうな気も・・・。
投稿者 Fox  (高校生) 投稿日時 2012/1/24 23:00:16
ラオシスさんわざわざありがとうございました。
今日、学校で友達に聞いた所いろいろ教えていただいたので大丈夫です。
サンプルコードまで書いて下さり本当にありがとうございました。

またわからないことがあれば教えていただければ嬉しい限りです。
投稿者 Public   (社会人) 投稿日時 2012/1/25 14:24:16
= New HistoryList With {.day = Today.AddDays(-1)}
        End If
    End Sub
    Inherits TreeNode
    Public Property History As History
End ClassPublic Class Form1
    Private TodayHistoryList As New HistoryList
    Private YesterDayHistoryList As New HistoryList
    Private ParentToday, ParentYesterDay As TreeNode

    Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        TodayHistoryList.WriteFile()
        YesterDayHistoryList.WriteFile()
    End Sub
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'TreeViewの初期化 
        InitTreeView()

        '今日 
        TodayHistoryList = HistoryList.ReadFile(Today)
        If Not IsNothing(TodayHistoryList) Then
            TodayHistoryList.TreeViewColumnsAdd(ParentToday)
        Else
            TodayHistoryList = New HistoryList
        End If

        '昨日 
        YesterDayHistoryList = HistoryList.ReadFile(Today.AddDays(-1))
        If Not IsNothing(YesterDayHistoryList) Then
            YesterDayHistoryList.TreeViewColumnsAdd(ParentYesterDay)
        Else
            YesterDayHistoryList = New HistoryList With {.day = Today.AddDays(-1)}
        End If
    End Sub

    Private Sub WebBrowser1_DocumentCompleted(sender As System.Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        Dim NowDate As Date = Today
        '現在の日付と今日の日付が違う場合(日付が変更された) 
        If NowDate <> TodayHistoryList.day Then
            YesterDayHistoryList.WriteFile()
            TodayHistoryList.WriteFile()
            Call Form1_Load(Nothing, Nothing)
        End If

        TodayHistoryList.TreeViewHistoryListColumnAdd(ParentToday, New History With {.Title = WebBrowser1.DocumentTitle,
                                                    .URL = WebBrowser1.Url.AbsoluteUri,
                                                    .ViewDate = Now})
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        WebBrowser1.Navigate(TextBox1.Text)
    End Sub
    Private Sub InitTreeView()
        TreeView1.Nodes.Clear()
        ParentToday = New TreeNode("今日")
        ParentYesterDay = New TreeNode("昨日")
        TreeView1.Nodes.Add(ParentToday)
        TreeView1.Nodes.Add(ParentYesterDay)
    End Sub

    Private Sub TreeView1_DoubleClick(sender As System.Object, e As System.EventArgs) Handles TreeView1.DoubleClick
        WebBrowser1.Navigate(DirectCast(TreeView1.SelectedNode, HistoryTreeViewNode).History.URL)
    End Sub
End Class
Public Class HistoryTreeViewNode
    Inherits TreeNode
    Public Property History As History
End Class
投稿者 Public   (社会人) 投稿日時 2012/1/25 14:25:55
With {.T
  ory As History
End ClassPublic Class Form1
    Private TodayHistoryList As New HistoryListhttp://rucio.cloudapp.net/NewComment.aspx?ThreadId=10664http://rucio.cloudapp.net/NewComment.aspx?ThreadId=10664
    Private YesterDayHistoryList As New HistoryList
    Private ParentToday, ParentYesterDay As TreeNode

    Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        TodayHistoryList.WriteFile()
End ClassPublic Class Form1
    Private TodayHistoryList As New HistoryListhttp://rucio.cloudapp.net/NewComment.aspx?ThreadId=10664http://rucio.cloudapp.net/NewComment.aspx?ThreadId=10664
    Private YesterDayHistoryList As New HistoryList
    Private ParentToday, ParentYesterDay As TreeNode

    Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        TodayHistoryList.WriteFile()
End ClassPublic Class Form1
    Private TodayHistoryList As New HistoryListhttp://rucio.cloudapp.net/NewComment.aspx?ThreadId=10664http://rucio.cloudapp.net/NewComment.aspx?ThreadId=10664
    Private YesterDayHistoryList As New HistoryList
    Private ParentToday, ParentYesterDay As TreeNode

    Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        TodayHistoryList.WriteFile()
        YesterDayHistoryList.WriteFile()
    End Sub
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'TreeViewの初期化 
        InitTreeView()

        '今日 
        TodayHistoryList = HistoryList.ReadFile(Today)
        If Not IsNothing(TodayHistoryList) Then
            TodayHistoryList.TreeViewColumnsAdd(ParentToday)
        Else
            TodayHistoryList = New HistoryList
        End If

        '昨日 
        YesterDayHistoryList = HistoryList.ReadFile(Today.AddDays(-1))
        If Not IsNothing(YesterDayHistoryList) Then
            YesterDayHistoryList.TreeViewColumnsAdd(ParentYesterDay)
        Else
            YesterDayHistoryList = New HistoryList With {.day = Today.AddDays(-1)}
        End If
    End Sub

    Private Sub WebBrowser1_DocumentCompleted(sender As System.Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        Dim NowDate As Date = Today
        '現在の日付と今日の日付が違う場合(日付が変更された) 
        If NowDate <> TodayHistoryList.day Then
            YesterDayHistoryList.WriteFile()
            TodayHistoryList.WriteFile()
            Call Form1_Load(Nothing, Nothing)
        End If

        TodayHistoryList.TreeViewHistoryListColumnAdd(ParentToday, New History With {.Title = WebBrowser1.DocumentTitle,
                                                    .URL = WebBrowser1.Url.AbsoluteUri,
                                                    .ViewDate = Now})
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        WebBrowser1.Navigate(TextBox1.Text)
    End Sub
    Private Sub InitTreeView()
        TreeView1.Nodes.Clear()
        ParentToday = New TreeNode("今日")
        ParentYesterDay = New TreeNode("昨日")
        TreeView1.Nodes.Add(ParentToday)
        TreeView1.Nodes.Add(ParentYesterDay)
    End Sub

    Private Sub TreeView1_DoubleClick(sender As System.Object, e As System.EventArgs) Handles TreeView1.DoubleClick
        WebBrowser1.Navigate(DirectCast(TreeView1.SelectedNode, HistoryTreeViewNode).History.URL)
    End Sub
End Class
Public Class HistoryTreeViewNode
    Inherits TreeNode
    Public Property History As History
End Class
End Class
Public Class HistoryTreeViewNode
    Inherits TreeNode
    Public Property History As History
End Class
    End Sub
End Class
Public Class HistoryTreeViewNode
    Inherits TreeNode
    Public Property History As History
End Class
投稿者 (削除されました)  () 投稿日時 2013/10/21 14:38:58
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/10/21 22:31:08
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/10/23 10:46:25
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/10/31 11:14:13
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/10/31 11:25:40
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/10/31 11:29:32
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/10/31 11:29:52
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/10/31 11:30:48
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/10/31 11:39:33
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/10/31 11:40:42
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/11/2 12:22:06
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/11/3 01:12:07
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/11/3 15:43:08
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/11/3 21:26:16
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/11/3 23:50:29
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/11/3 23:56:40
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/11/3 23:57:24
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/11/3 23:58:36
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/11/3 23:58:46
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/11/4 00:00:46
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/11/4 00:01:42
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/11/4 00:04:33
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/11/4 00:05:54
(削除されました)
投稿者 (削除されました)  () 投稿日時 2013/11/4 00:07:47
(削除されました)