投稿者 るきお  (社会人) 投稿日時 2009/11/2 02:13:18
こんにちは。
ページごとのアイコンをどこに表示したいのかわかりませんでしたが、
仮にフォームのアイコンとして表示したいものと考えてプログラムしてみました。


…が、結構大変そうなのでめげて中途半端です。
googleはいけます。

  
Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click

        Dim icon As Icon
        icon = GetWebSiteIcon("http://www.google.co.jp")

        If icon IsNot Nothing Then
            Me.Icon = icon
        Else
            Me.Icon = Nothing
        End If

    End Sub

    Private Function GetWebSiteIcon(ByVal url As StringAs Icon

        Dim icon As Icon
        Dim webpage As System.Net.HttpWebRequest = Net.WebRequest.Create(url & "/favicon.ico")

        Dim response As System.Net.WebResponse

        Try
            response = webpage.GetResponse()
        Catch ex As Net.WebException
            
        End Try


        If response IsNot Nothing AndAlso response.ContentType.ToUpper.StartsWith("IMAGE/"Then
            'ルートディレクトリにfavicon.icoがある場合 
            Dim iconFolderName As String = Application.StartupPath & "\icon"

            If IO.Directory.Exists(iconFolderName) = False Then
                IO.Directory.CreateDirectory(iconFolderName)
            End If

            Dim iconFileFullPath As String = iconFolderName & "\temp.ico"
            Dim reader As New IO.BinaryReader(response.GetResponseStream)
            IO.File.WriteAllBytes(iconFileFullPath, reader.ReadBytes(response.ContentLength))
            reader.Close()
            icon = New Icon(iconFileFullPath)

        Else
            'その他の場合(未実装) 
           
        End If

        response.Close()

        Return icon
    End Function


あにすさんの情報の
http://ja.wikipedia.org/wiki/Favicon 
をプログラムで表現しようとしたのですが、

要するにWebサイト側でのアイコンの場所は
1.ルートディレクトリ直下のfavicon.ico
2.html内のタグで指定
の2パターンがあって、
上記サンプルでは1の方に中途半端に対応していて、2のほうは無対応です。

メジャーなブラウザ並みに対応しようと思ったら結構大変そうな感触です。
IEにはこのロジックが実装されているはずなのだからWebBrowserコントロール経由で
もっと簡単に持ってくる方法があるような気がします。

どなたかご存じないですか?