.NET TIPS

プログラムからブラウザやメーラを起動するには?

デジタルアドバンテージ
2004/10/01

 「TIPS:ほかのアプリケーションを実行するには?」では、プログラム内からほかのアプリケーションを実行する方法を紹介した。この方法を利用すれば、プログラムからWebサイトのURLアドレスを指定してデフォルト・ブラウザでWebページを開いたり、メール・アドレスなどを指定してデフォルト・メーラで新規メール作成ウィンドウを開いたりすることが可能だ。本稿では、それらの具体的な実装方法を紹介する。

URLアドレスを指定してデフォルト・ブラウザでWebページを開く方法

 URLアドレスを指定してデフォルトのブラウザでWebページを開く方法については、「TIPS:ほかのアプリケーションを実行するには?」の中でサンプル・プログラムとして紹介している。

 具体的な実装方法は、Processクラス(System.Diagnostics名前空間)のStartメソッドに「http://」や「https://」で始まるURLアドレスを指定するだけである。以下はそのサンプル・プログラムである(前掲のTIPSと同じサンプル・プログラム)。

// procstart.cs
using System.Diagnostics;
public class ProcessStart {
  static void Main() {
    Process.Start("http://www.atmarkit.co.jp/fdotnet/");
  }
}
// コンパイル方法:csc procstart.cs
URLアドレスを指定してデフォルト・ブラウザでWebページを開くサンプル・プログラム(C#)
 
' procstart.vb
Imports System.Diagnostics
Class ProcessStart
  Shared Sub Main()
    Process.Start("http://www.atmarkit.co.jp/fdotnet/")
  End Sub
End Class
' コンパイル方法:vbc /r:System.dll procstart.vb
URLアドレスを指定してデフォルト・ブラウザでWebページを開くサンプル・プログラム(VB.NET)

 これを実行すると、次のような画面が表示される(デフォルト・ブラウザがIEの場合)。

URLアドレス指定によってデフォルト・ブラウザで開かれたWebページ

メール・アドレスを指定してデフォルト・メーラを開く方法

 次に、メール・アドレスを指定してデフォルトのメーラを開く方法だが、これもブラウザを開く方法とまったく同じである。

 具体的には、ProcessクラスのStartメソッドに「mailto:」で始まるメール・アドレスを指定するだけである。以下は、これを実装したサンプル・コードである(Startメソッドの前後のコードは省略している)。

// C#
Process.Start("mailto:foo@boo.co.jp");
' VB.NET
Process.Start("mailto:foo@boo.co.jp")

 コード内の「foo@boo.co.jp」の部分が、メール・アドレスである。このサンプル・プログラムを実行すると、次のような画面が表示される(デフォルト・メーラがOutlookの場合)。

メール・アドレス指定によってデフォルト・メーラで開かれた新規メール作成ウィンドウ

メーラを開くときに「CC」「BCC」「件名」「本文」を含める方法

 上記の例では「宛先」のみを指定しているが、実は、メール・アドレス指定でメーラの新規メール作成ウィンドウを起動する際に、これ以外の「CC」「BCC」「件名(=subject)」「本文(=body)」の値を含めることもできる(ただし、確かにOutlookやOutlook Express、Becky!などのメーラでは正しく動作したが、メーラが対応していないことも考えられるので、常にうまくいくとは考えない方がよいだろう)。

 「宛先」以外の「CC」「BCC」「件名」「本文」の値は、「宛先」の後に「?」で続けて記述し、またそれぞれの値は「&」を使って連結する。すべての値を指定した場合には、次のような構文となる(項目内で不必要なものがある場合には、その項目を省略することが可能だ)。

mailto:<宛先>?cc=<CC>&bcc=<BCC>&subject=<件名>&body=<本文>”

 次のサンプル・コードでは、実際にこの構文を使って、「宛先」「CC」「BCC」「件名」「本文」のすべての値を指定したうえでメーラの新規メール作成ウィンドウを起動している(なお、Startメソッドの前後のコードは省略している)。

// C#
Process.Start("mailto:foo@boo.co.jp,moo@boo.co.jp?cc=boo@boo.co.jp&bcc=poo@boo.co.jp&subject=ここは件名&body=ここは本文");
' VB.NET
Process.Start("mailto:foo@boo.co.jp,moo@boo.co.jp?cc=boo@boo.co.jp&bcc=poo@boo.co.jp&subject=ここは件名&body=ここは本文")

 上記のコードの注意点としては「宛先」となるメール・アドレスを複数指定しているところだ(「foo@boo.co.jp」「moo@boo.co.jp」)。メール・アドレスを複数指定するには、このようにして「カンマ(,)」でそれぞれのメール・アドレスを区切るか、もしくは「セミコロン(;)」で区切るとよい。なお、Outlookでは、カンマを区切り文字として使用すると、正しく処理できない場合がある。これに(ユーザー側の運用によって)対処する方法については、マイクロソフトのサポート技術情報の「[OL2003] カンマが電子メール アドレスの区切り文字として認識されない」を参照してほしい。

 上記のサンプル・コードを実行すると、次のような画面が表示される。

「宛先」「CC」「BCC」「件名」「本文」のすべての値を指定して表示された新規メール作成ウィンドウ

 上記のコードで新規メール作成ウィンドウを起動する場合には、すべての文字が使えるわけではないので注意すること。例えば、メールの「件名(=subject)」や「本文(=body)」の指定で、改行や、「?」「&」「カンマ(,)」「セミコロン(;)」などといった上記の構文で使われる文字、「%」といった文字コード表記で使われる文字などは、URLエンコードされた文字コード表記に置き換えて使用する必要がある。ただし、これらのうちのカンマやセミコロンについては、筆者の環境のOutlookやBecky!で試した限りでは、必ずしもURLエンコードしなくても文字化けなどの問題はなかった。

 このような文字コード表記への置き換えが必要な(もしくは置き換えた方が無難な)代表的な文字を、次の表にまとめた。

文字 文字コード表記
改行 %0D%0A
? %3F
& %26
カンマ(,) %2C
セミコロン(;) %3B
ダブル・クォーテーション(") %22
% %25
文字コード表記への置き換えが必要な代表的な文字
例えば、「改行」を行う場合には、実際の文字の代わりに「%0D%0A」というURLエンコードされた文字コード表記を使用する。

 また、日本語などの2バイト文字もURLエンコードしないと、文字化けする可能性があるので、注意すること。実際に、2バイト文字などを(日本語Windows環境と同じShift-JISコードで)URLエンコーディングしたい場合は、次のいずれかのようにしてURLエンコードすればよい(コード例はC#)。

  • string encoded = System.Web.HttpUtility.UrlEncode("あいうえお", System.Text.Encoding.GetEncoding("Shift-JIS"));
  • string encoded = System.Web.HttpUtility.UrlEncode("あいうえお", System.Text.Encoding.GetEncoding(932));
  • string encoded = System.Web.HttpUtility.UrlEncode("あいうえお", System.Text.Encoding.Default);

 上のコードにあるHttpUtilityクラス(System.Web名前空間)のUrlEncodeメソッドのデフォルト・エンコーディングはUTF-8だが、Encodingクラス(System.Text名前空間)のDefaultプロパティの値はShift-JISとなっているので、注意してほしい。URLエンコーディングの詳細については、「TIPS:文字列をURLエンコードするには?」および「TIPS:Encodingクラスで扱えるエンコーディング名は?」を参照してほしい。

 次のサンプル・コードは、上記のURLエンコーディングされた文字を「本文」内に使ってメーラの新規メール作成ウィンドウを開いている。

// C#
Process.Start("mailto:foo@boo.co.jp?body=改行を挿入↓%0D%0A「%3F」「%26」「%2C」「%3B」「%22」「%25」");
' VB.NET
Process.Start("mailto:foo@boo.co.jp?body=改行を挿入↓%0D%0A「%3F」「%26」「%2C」「%3B」「%22」「%25」")

 これを実行すると、次のような画面が表示される。

文字コードへの置き換えが必要な文字の使用例

 なお、デフォルトのメーラが正常にインストールされていない場合や、正しくデフォルト・メーラが指定されていない場合などでは、上記サンプル・プログラムを実行しても正しくメーラの新規メール作成ウィンドウが起動されない場合があるので注意してほしい。End of Article

カテゴリ:クラス・ライブラリ 処理対象:Windows環境
カテゴリ:クラス・ライブラリ 処理対象:URL
使用ライブラリ:Processクラス(System.Diagnostics名前空間)
使用ライブラリ:HttpUtilityクラス(System.Web名前空間)
使用ライブラリ:Encodingクラス(System.Text名前空間)
関連TIPS:ほかのアプリケーションを実行するには?
関連TIPS:文字列をURLエンコードするには?
関連TIPS:Encodingクラスで扱えるエンコーディング名は?
 
この記事と関連性の高い別の.NET TIPS
電子メールを送信するには?
JISコード(JIS-2022-JP)でメールを送信するには?
ほかのアプリケーションを実行するには?
文字列をURLエンコードするには?
.NET Framework 2.0で電子メールを送信するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間