|   | 
.NET TIPS 
既定のブラウザ/メーラの.EXEファイル・パスを取得するには?[C#、VB]
デジタルアドバンテージ 一色 政彦 
2007/10/04 | 
  | 
  | 
 「TIPS:プログラムからブラウザやメーラを起動するには?」では、既定のブラウザ(以降、デフォルト・ブラウザ)や既定のメーラ(以降、デフォルト・メーラ)を起動する方法を紹介した。しかしこの方法では、(デフォルト・ブラウザやデフォルト・メーラを立ち上げたうえで)実際にWebページを開くときやメールを作成するときにしか使用できない。つまり、「単にデフォルト・ブラウザやデフォルト・メーラを立ち上げたいだけ」という用途では使えないのだ。
 このような用途を実現するには、デフォルト・ブラウザやデフォルト・メーラの.EXEファイルのパスを取得して、それを直接実行するのが、最も素直な方法だろう。そこで本TIPSでは、デフォルト・ブラウザやデフォルト・メーラの.EXEファイル・パスを取得する方法を紹介する。
デフォルト・ブラウザやデフォルト・メーラの.EXEファイル・パスを取得する方法
 デフォルト・ブラウザやデフォルト・メーラの.EXEファイルのパスを調べるには、レジストリを参照するとよい。具体的には、それぞれ以下のキーの「(既定)」値を調べればよい。
- デフォルト・ブラウザ:HKEY_CLASSES_ROOT\http\shell\open\command
 
- デフォルト・メーラ:HKEY_CLASSES_ROOT\mailto\shell\open\command
 
 次の画面は、レジストリ・エディタで実際にデフォルト・ブラウザのレジストリ値を調べているところである。
  | 
| (レジストリ・エディタによる)デフォルト・ブラウザに関するレジストリ値の参照 | 
| この例では「HKEY_CLASSES_ROOT\http\shell\open\command」を参照して、デフォルト・ブラウザの.EXEファイル・パスを調べている。なお、レジストリ・エディタを起動するには、[スタート]メニューの[ファイル名を指定して実行]をクリックして[ファイル名を指定して実行]ダイアログを起動し、そのダイアログのテキストボックスに「regedit」を入力して実行する。 | 
|   | 
  | 
キー「HKEY_CLASSES_ROOT\http\shell\open\command」をクリック。 | 
 
|   | 
  | 
「(既定)」値を参照する。 | 
 
|   | 
  | 
デフォルト・ブラウザの.EXEファイル・パスが含まれた文字列が格納されている。ちなみに、この[文字列の編集]ダイアログは「(既定)」値をダブルクリックすれば表示される。 | 
 
  | 
 上の画面を見ると分かるように、これらの値では、デフォルト・ブラウザの.EXEファイルのフル・パスがあり、その後に「-requestPending -osint -url "%1"」というコマンドライン引数が続いている。これらのコマンドライン引数(オプション)の方は、本稿の目的では不要である(そのためそれらの説明は割愛する)。ここでは、最初の.EXEファイル・パスのみを抽出すれば完了である。
 レジストリの値を取得する方法については、「TIPS:レジストリの値を取得するには?」を参考にしてほしい。なお、本稿のように「(既定)」の値を取得する場合には、RegistryKeyオブジェクト(Microsoft.Win32名前空間)のGetValueメソッドの第1パラメータに空文字(「""」もしくは「String.Empty」)を指定すればよい。
 以上の処理を実装したコード例を次に示す。
using System; 
using Microsoft.Win32; 
using System.IO; 
using System.Diagnostics; 
 
class Program 
{ 
  static void Main(string[] args) 
  { 
    // 既定のブラウザとメーラのパスを取得する 
    string browserPath = GetDefaultBrowserExePath(); 
    string mailerPath = GetDefaultMailerExePath(); 
 
    // ブラウザとメーラを立ち上げる 
    Process.Start(browserPath); 
    Process.Start(mailerPath); 
  } 
 
  private static string GetDefaultBrowserExePath() 
  { 
    return _GetDefaultExePath(@"http\shell\open\command"); 
  } 
 
  private static string GetDefaultMailerExePath() 
  { 
    return _GetDefaultExePath(@"mailto\shell\open\command"); 
  } 
 
  private static string _GetDefaultExePath(string keyPath) 
  { 
    string path = ""; 
 
    // レジストリ・キーを開く 
    // 「HKEY_CLASSES_ROOT\xxxxx\shell\open\command」 
    RegistryKey rKey = Registry.ClassesRoot.OpenSubKey(keyPath); 
    if (rKey != null) 
    { 
      // レジストリの値を取得する 
      string command = (string)rKey.GetValue(String.Empty); 
      if (command == null) 
      { 
        return path; 
      } 
 
      // 前後の余白を削る 
      command = command.Trim(); 
      if (command.Length == 0) 
      { 
        return path; 
      } 
 
      // 「"」で始まる長いパス形式かどうかで処理を分ける 
      if (command[0] == '"') 
      { 
        // 「"〜"」間の文字列を抽出 
        int endIndex = command.IndexOf('"', 1); 
        if (endIndex != -1) 
        { 
          // 抽出開始を「1」ずらす分、長さも「1」引く 
          path = command.Substring(1, endIndex - 1); 
        } 
      } 
      else 
      { 
        // 「(先頭)〜(スペース)」間の文字列を抽出 
        int endIndex = command.IndexOf(' '); 
        if (endIndex != -1) 
        { 
          path = command.Substring(0, endIndex); 
        } 
        else 
        { 
          path = command; 
        } 
      } 
    } 
 
    return path; 
  } 
} 
  | 
 
 
Imports Microsoft.Win32 
Imports System.Diagnostics 
 
Module Module1 
 
  Sub Main() 
    ' 既定のブラウザとメーラのパスを取得する 
    Dim browserPath As String = GetDefaultBrowserExePath() 
    Dim mailerPath As String = GetDefaultMailerExePath() 
 
    ' ブラウザとメーラを立ち上げる 
    Process.Start(browserPath) 
    Process.Start(mailerPath) 
  End Sub 
 
  Private Function GetDefaultBrowserExePath() As String 
    Return _GetDefaultExePath("http\shell\open\command") 
  End Function 
 
  Private Function GetDefaultMailerExePath() As String 
    Return _GetDefaultExePath("mailto\shell\open\command") 
  End Function 
 
  Private Function _GetDefaultExePath(ByVal keyPath As String) As String 
    Dim path As String = "" 
 
    ' レジストリ・キーを開く 
    ' 「HKEY_CLASSES_ROOT\xxxxx\shell\open\command」 
    Dim rKey As RegistryKey = _ 
      Registry.ClassesRoot.OpenSubKey(keyPath) 
    If Not rKey Is Nothing Then 
      ' レジストリの値を取得する 
      Dim command As String = _ 
        CType(rKey.GetValue(String.Empty), String) 
      If command = Nothing Then 
        Return path 
      End If 
 
      ' 前後の余白を削る 
      command = command.Trim() 
      If command.Length = 0 Then 
        Return path 
      End If 
 
      ' 「"」で始まる長いパス形式かどうかで処理を分ける 
      If command.Chars(0) = """"c Then 
        ' 「"〜"」間の文字列を抽出 
        Dim endIndex As Integer = command.IndexOf(""""c, 1) 
        If endIndex <> -1 Then 
          ' 抽出開始を「1」ずらす分、長さも「1」引く 
          path = command.Substring(1, endIndex - 1) 
        End If 
      Else 
        ' 「(先頭)〜(スペース)」間の文字列を抽出 
        Dim endIndex As Integer = command.IndexOf(" "c) 
        If endIndex <> -1 Then 
          path = command.Substring(0, endIndex) 
        Else 
          path = command 
        End If 
      End If 
    End If 
 
    Return path 
 
  End Function 
 
End Module
 | 
 
  | 
| デフォルト・ブラウザとデフォルト・メーラの.EXEファイル・パスを取得するコンソール・アプリケーションのサンプル・プログラム(上:C#、下:VB) | 
 コードの意味、内容についてはコード中のコメントが参考になると思うので割愛する。
 このサンプル・プログラムを実行すると、デフォルト・ブラウザとデフォルト・メーラが起動する。プログラムの起動方法については「TIPS:ほかのアプリケーションを実行するには?」を参考にされたい。
 また、本稿の方法では、短い8.3形式の.EXEファイル・パスが得られるが、これを長いパス形式に変換したい場合には、「TIPS:8.3形式の短いパスを長いパスに変換するには?」を参照していただきたい。
 
|  
 | 
 
generated by  
 | 
 
 
 | 
 
 
	
		Insider.NET 記事ランキング
		
		
			本日
			月間