|
.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 記事ランキング
本日
月間