Visual Basic 中学校 掲示板
http://rucio.groupsite.jp/commu/ThreadDetail.aspx?ThreadId=9423
こんなやりとりがありまして。
最初の返信でWikipediaのリンクだけ示したのは、眠くてまともにコードが書けなかったからです。
その後、管理人のるきおさんがコードを書いていたので、僕も書きたくなったわけです。
眠くなかったのでサクっと出来ました。折角なのでC#に書き直してここに記録。
using System;
using System.Drawing;
using System.IO;
using System.Net;
using System.Windows.Forms;
namespace WindowsFormsApplication1 {
public partial class Form1:Form {
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
this.webBrowser1.Navigate("http://blogs.dion.ne.jp/anis7742/");
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
foreach(HtmlElement linkTag in this.webBrowser1.Document.GetElementsByTagName("link")) {
string relAttribute = linkTag.GetAttribute("rel");
string iconUrl;
if(relAttribute == "shortcut icon" || relAttribute == "icon") {
iconUrl = linkTag.GetAttribute("href");
if(iconUrl.StartsWith("http")) { //完全なURLの場合
this.Icon = getIconFromUrl(iconUrl);
} else if(iconUrl.StartsWith("/")) { //絶対パスの場合
this.Icon = getIconFromUrl("http://" + e.Url.Host + iconUrl);
} else { //相対パスの場合
this.Icon = getIconFromUrl(e.Url.ToString() + iconUrl);
}
break;
}
}
//タグでの指定が無い場合
this.Icon = getIconFromUrl("http://" + e.Url.Host + "/favicon.ico");
}
private Icon getIconFromUrl(string url) {
using(WebClient webClient = new WebClient())
using(MemoryStream stream = new MemoryStream(webClient.DownloadData(url))) {
return new Icon(stream);
}
}
}
}