Silverlight をインストールするには、ここをクリックします*
Japan変更|すべてのMicrosoft のサイト
MSDN
|MSDN ライブラリ|デベロッパー センター|ダウンロード情報|開発ツール製品|コミュニティ|ご意見・ご要望|サイトマップ
MSDN Home > MSDN アカデミック アライアンス > 第 2 回 VC# で MSHTML

第 2 回 VC# で MSHTML

〜 Visual C# .NET による MSDNAA おもしろプログラミング 〜

1.1 はじめに

近年、Web の利用者が爆発的に増加すると共に、Web ブラウザは高機能化・高性能化の一途を辿ってきました。Microsoft 社が開発した Internet Explorer は、数ある Web ブラウザの中でも利用者が最も多く、非常に優れた機能を数多く実装しています。

Microsoft 社では、この Internet Explorer の優れた機能をコンポーネント化 (部品化) し、開発者用ネットワークである MSDN の中で情報を提供しています。この Internet Explorer のコンポーネントは、MSHTML テクノロジと呼ばれ、Internet Explorer の高度なレンダリング機能や HTML のパーサ機能などをアプリケーションに組み込んで利用できます。そこで、本章では、MSHTML テクノロジを Visual C# のアプリケーションから利用する方法を解説します。本章では MSHTML テクノロジの技術の中でも特に HTML 文書のレンダリング機能について解説します。

1.2 MSHTML テクノロジ

1.2.1 Internet Explorer と MSHTML

Internet Explorer は、非常に多くの機能を実装していると同時に、高速性・安定性・柔軟性などの点から見ても高い性能を持っているため、世界中で最も利用者の多いWeb ブラウザとしての地位を確立しています。特に、Internet Explorer の HTML 解析機能は、規格から外れた HTML であっても、多少のエラーは読み飛ばしてコンテンツを表示する頑健性を持っています。

Microsoft 社では、このように高機能・高性能を誇る Internet Explorer の機能をコンポーネント化して、MSHTML テクノロジという総称で開発者に提供しています。開発者は MSHTML テクノロジを利用することにより、Internet Explorer のHTML 構文解析機能やブラウザ機能をアプリケーションから利用することが可能になるため、プログラミングの幅が大きく広がります。例えば、HTML 文書の中からリンク部分だけを抽出してチェックを行うデッドリンクチェッカーや、Web を自動巡回するロボットプログラムなどを簡単に開発することができます。また、オリジナルの Web ブラウザを開発することも可能です。

MSHTML は、大きく分けて HTML パーサと HTML レンダリングエンジンから構成されています。HTML パーサは、HTML の構文を解析し、プログラムから利用しやすいように HTML 文書の情報を階層構造化します。また、 HTML レンダリングエンジンは、人間が解読しにくいタグ文書を表や画像などの形にレンダリングし、人間が閲覧しやすい形で表示を行います。MSHTML の概念を図 1 に示します。

図 1 : MSHTML の概念

図 1 : MSHTML の概念

1.2.2 MSHTML と Visual C#

MSHTML のコンポーネントは、ActiveX (COM) の DLL として開発されています。そのため、COM や ActiveX などの従来の Windows 環境でのコンポーネント技術を利用できる Visual C# からも利用することができます。

1.2.3 Web ブラウザコントロール

MSHTML は大きく分けて、HTML の構文を解析する HTML パーサと描画を行う HTML レンダリングエンジンから構成されています。このうち、HTML レンダリングエンジンの機能をコントロールとしてまとめたものが Web ブラウザコントロールです。Web ブラウザコントロールを利用することにより、Internet Explorer のような Web ブラウザ機能をアプリケーションに組み込むことができます。Web ブラウザコントロールを利用したアプリケーションを図 2 に示します。

図 2 : Web ブラウザコントロールを利用したアプリケーション

図 2 : Web ブラウザコントロールを利用したアプリケーション

1.2.4 HTML と HTML パーサ

通常、HTML や XML などのタグ文書を扱うアプリケーションを開発する場合には、タグ文書は直接扱わず、構文解析するパーサを利用するのが一般的です。特に、最近では XML 文書を構文解析するための 「XML パーサ」 や 「XML DOM」 が数多く開発されていますが、HTML にも、構文解析をするための HTML パーサが存在します。HTML パーサを利用することにより、プログラムから HTML の構造や内容を抽出することや、編集することができます。例えば、HTML パーサを利用すれば、HTML 内の A タグの href 属性だけを抽出することなどは非常に容易であるため、ページ内のデッドリンクを調査するデッドリンクチェッカーを開発することは非常に簡単です。また、Web サイトの自動巡回ロボット、アクセシビリティチェッカーやユーザビリティチェッカーなどのプログラムにも HTML パーサの技術は利用されています。HTML パーサの概念を図 3 に示します。

図 3 : HTML パーサ

図 3 : HTML パーサ

MSHTML の HTML パーサ機能については、次章で詳しく解説します。

1.2.5 Web オーサリング機能

MSHTML テクノロジの醍醐味として、Web オーサリング機能があります。Web オーサリング機能を利用することにより、Frontpage などのような WYSIWYG (What You See Is What You) 形式のインタフェースをアプリケーションに実装することができます。

1.3 オリジナル簡易 Web ブラウザ

1.3.1 オリジナル簡易 Web ブラウザの概要

本節では、実際に Web ブラウザコントロールを利用して簡易 Web ブラウザを開発します。簡易 Web ブラウザの完成イメージを図 4 に示します。

図 4 : 簡易 Web ブラウザの完成イメージ

図 4 : 簡易 Web ブラウザの完成イメージ

簡易 Web ブラウザに実装する機能を表 1 に示します。

表 1 : 簡易 Web ブラウザに実装する機能

機能名説明
URL へのジャンプ機能指定した URL へジャンプ
ホームページへのジャンプ機能Internet Explorer で設定しているホームページへジャンプ
戻る機能ひとつ前のページへ移動
進む機能ひとつ次のページへ移動
検索サイトへのジャンプ機能Internet Explorer で設定している検索サイトへジャンプ
タイトルの表示機能HTML 内の title タグの内容をタスクバーに表示

1.3.2 プロジェクトの作成

Visual Studio.NET を起動し、スタートページから【新しいプロジェクト】 ボタンをクリックします。【プロジェクト】 の種類には 【Visual C# プロジェクト】 を選択し、【テンプレート】 の種類には 【Windows アプリケーション】 を選択します。プロジェクトの作成方法を図 5 に示します。

図 5 : プロジェクトの作成方法

図 5 : プロジェクトの作成方法

1.3.3 コントロールの追加・参照設定

Web ブラウザコントロールと MSHTML のオブジェクト群をプログラムの中で利用するためには、コントロールの追加と参照の設定を行う必要があります。

(1) Web ブラウザコントロールの追加

Web ブラウザコントロールをツールボックスに追加するためには、まずツールボックスを右クリックし、【ツールボックスのカスタマイズ】 を選択します。次に、【ツールボックスのカスタマイズウィンドウ】 で、【COM コンポーネント】 の中から、【Microsoft Web Browser】 を選択します。最後に OK ボタンをクリックすると、ツールボックスに Web ブラウザコントロールが追加されます。

(2) 参照設定

MSHTML のオブジェクト群に対する参照の設定を行うためには、まずメニューから 【プロジェクト】→【参照の追加】 を選択します。次に、参照の追加ウィンドウで、【COM コンポーネント】 の中から、【Microsoft HTML Object Library】 を追加します。Web ブラウザコントロールと参照設定の方法を図 6 に示します。

図 6 : コントロールの追加と参照の設定

図 6 : コントロールの追加と参照の設定

1.3.4 フォームの作成

(1) コントロールの配置

フォームには、図 7 に示すようにコントロールを配置します。

図 7 : コントロールの配置

図 7 : コントロールの配置

(2) プロパティの設定

各コントロールのプロパティには、次の値を設定します。フォームに配置するコントロールのプロパティ設定を表 2 に示します。

表 2 : フォームに配置するコントロールのプロパティ設定

コントロール名プロパティ設定値
textBox1(Name)txtURL
 Text(なし)
button1(Name)btnMove
 Text移動
button2(Name)btnBack
 Text戻る
button3(Name)btnForward
 Text進む

(3) メニューの作成

本プログラムでは、MainMenu コントロールを利用してメニューを実装します。メニューの作成方法を図 8 に示します。

図 8 : メニューの作成

図 8 : メニューの作成

各メニュー項目の設定を表 3 に示します。

表 3

メニュー名メニュー項目名表示するテキスト
menuItem1mnuBrowserHomeホームページへ移動
menuItem2mnuBrowserSearch検索エンジンへ移動
menuItem3mnuBrowserEditHTML 編集

(4) イベントハンドラの追加

フォームにイベントハンドラを設定します。追加するイベントハンドラの一覧を表 4 に示します。

表 4 : 追加するイベントハンドラ一覧表

コントロール名イベント名イベントハンドラ名
btnMoveClickbtnMove_Click
btnBackClickbtnBack_Click
btnForwardClickbtnForward_Click
mnuBrowserHomeClickmnuBrowserHome_Click
mnuBrowserSearchClickmnuBrowserSearch_Click
mnuBrowserEditClickmnuBrowserEdit_Click
axWebBrowser1NavigateComplete2axWebBrowser1_NavigateComplete2

(5) ソースコードの追加

フォームに記述するソースコードを次に示します。

        private void mnuBrowserHome_Click(object sender, System.EventArgs e)
        {
axWebBrowser1.GoHome(); // ホームページへジャンプ
} private void btnForward_Click(object sender, System.EventArgs e) {
try { axWebBrowser1.GoForward(); // 進む } catch(Exception ee) { MessageBox.Show("これ以上は進めません"); // エラーメッセージ }
} private void btnMove_Click(object sender, System.EventArgs e) {
object oNull = null; // NULLオブジェクトの生成 axWebBrowser1.Navigate(txtURL.Text,ref oNull, ref oNull,ref oNull,ref oNull); // 移動
} private void btnBack_Click(object sender, System.EventArgs e) {
try { axWebBrowser1.GoBack(); // 戻る } catch(Exception ee) { MessageBox.Show("これ以上は戻れません"); // エラーメッセージ }
} private void mnuBrowserEdit_Click(object sender, System.EventArgs e) {
mshtml.HTMLDocument myDocument = (mshtml.HTMLDocument)axWebBrowser1.Document; // ドキュメントオブジェクトの取得 myDocument.designMode = "On"; // 編集モード開始
} private void mnuBrowserSearch_Click(object sender, System.EventArgs e) {
axWebBrowser1.GoSearch(); // 検索エンジンへジャンプ
} private void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e) { mshtml.HTMLDocument myDocument =
(mshtml.HTMLDocument)axWebBrowser1.Document; // ドキュメントオブジェクトの取得 this.Text = myDocument.title; // タイトルの表示
} } }

(6) ソースコードの解説

本プログラムでは、Web ブラウザコントロールに用意された様々なメソッドやプロパティを利用します。本プログラムの各機能で利用するメソッドおよびプロパティを表 5 に示します。

表 5 : Web ブラウザコントロール

機能名利用するメソッド・プロパティ
URL へのジャンプ機能Navigate メソッド
ホームページへのジャンプ機能GoHome メソッド
戻る機能GoBack メソッド
進む機能GoForwardメソッド
検索サイトへのジャンプ機能GoSearch メソッド
タイトルの表示機能Document プロパティ

Navigate メソッドは、第一引数に渡した URL の HTML を Web ブラウザコントロールに表示します。Navigate メソッドの構文を次に示します。

Web ブラウザコントロール.Navigate (string URL, object フラグ, object 対象フレーム, object ポストデータ, object ヘッダー)

第二引数以降は、省略することが可能です。引数を省略する場合は、null 値を代入した object 変数を渡します。

GoHome メソッド、GoSearch メソッドを利用することにより、ホームページや検索エンジンに移動することができます。また、GoBack メソッド、GoForward メソッドを利用することにより、ひとつ前のページやひとつ後ろのページに移動することができます。これらのメソッドには引数はありません。

Document プロパティは、現在 Web ブラウザコントロールに表示している HTML 文書の内容にアクセスするためのプロパティです。Document プロパティを利用することにより、HTML 文書のタイトル、文字コード、文書構造などを参照することができます。

1.4 おわりに

本章では、Microsoft 社が開発したWeb ブラウザ Internet Explorer のコンポーネントである Web ブラウザコントロールの利用方法を解説しました。Web ブラウザコントロールをはじめとする MSHTML テクノロジを利用することにより、アプリケーションから Internet Explorer が持つ HTML の解析・レンダリング機能が利用できます。開発者は、Web の研究やアプリケーション開発をする上で必要となる HTML の構文解析技術やレンダリング技術に必要なプログラミング量を激減させることができます。本章では、レンダリング機能を中心に解説しましたが、次章では MSHTML の HTML 解析機能について解説します。


Visual C# .NET による MSDNAA おもしろプログラミング

本コラムでは、MSDN や MSDNAA の中で公開されているリソースの中でも、プログラミングの楽しさを追及できるものを集めて紹介し、新しいオブジェクト指向言語 「Visual C#. NET」 での利用法を解説していきます。



著者略歴

田中 成典 (たなか しげのり)

1986 年関西大学工学部土木工学科卒業
1988 年関西大学大学院工学研究科 土木工学専攻博士課程前期課程修了
1996 年博士 (工学) 授与,関西大学
1997 年関西大学総合情報学部助教授 (現在に至る)
主な著書:やさしい C のはじめかた,オーム社,1993 年
 建設技術者のための知識情報処理の実践,関西大学出版部,1999 年
 DirectX8,工学社,2001 年
 ステップアップ XML,工学社,2002 年
 Linux アプリケーション入門,森北出版,2002年    ほか

中山 浩太郎 (なかやま こうたろう)

2001 年 3 月関西大学総合情報学部総合情報学科卒業
2003 年 3 月関西大学大学院総合情報学研究科 博士課程前期課程修了
2003 年 4 月関西大学大学院総合情報学研究科 博士課程後期課程入学 (現在に至る)
主な著書:Web 工房シリーズ Perl の達人,森北出版,1999 年
 決定版 Visual Basic,共立出版,2000年
 DirectX8,工学社,2001 年
 Linux アプリケーション入門,森北出版,2002 年
 ステップアップ Visual C# .NET 入門,工学社,2002 年    ほか

中村 健二 (なかむら けんじ)

2000 年 4 月関西大学総合情報学部総合情報学科入学 (現在に至る)
主な著書:DirectX8 & VC++ 3D の基礎とゲームの作り方,工学社,2002年

北川 悦司 (きたがわ えつじ)

2000 年 3 月関西大学総合情報学部総合情報学科卒業
2002 年 3 月関西大学大学院総合情報学研究科 博士課程前期課程修了
2002 年 4 月関西大学大学院総合情報学研究科 博士課程後期課程入学 (現在に至る)
主な著書:Web 工房シリーズ Java の達人,森北出版,1999 年
 デジカメ活用によるデジタル写真測量入門,森北出版,2000 年
 ステップアップ XML 活用法,工学社,2002 年

上山 智士 (うえやま さとし)

2002 年 4 月関西大学総合情報学部総合情報学科入学 (現在に至る)

杉町 敏之 (すぎまち としゆき)

2003 年 3 月関西大学総合情報学部総合情報学科卒業
2003 年 4 月関西大学大学院総合情報学研究科入学 (現在に至る)
主な著書:ステップアップ Visual C# .NET 入門,工学社,2002 年

野中 一希 (のなか かずき)

2003 年 3 月関西大学総合情報学部総合情報学科卒業
2003 年 4 月関西大学大学院総合情報学研究科入学 (現在に至る)
主な著書:ステップアップ Visual C# .NET 入門,工学社,2002 年


Microsoft