PC(ローカルマシン)にインストールされているWebブラウザーの一覧を、C#のプログラムで取得してリストに表示してほしいという要望があったので調べてみました。
Webブラウザーの一覧を取得する
PCにインストールされているWebブラウザーの情報はレジストリから取得することができます。
具体的にはレジストリの以下のパスを参照してブラウザーを取得します。
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Clients\StartMenuInternet
または
HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet
または
HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet
HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.MicrosoftEdge_8wekyb3d8bbwe
Microsoft EdgeのみローカルマシンのSOFTWAREから取得できないので、カレントユーザーのSoftwareから取得します。
サンプルプログラム
PCにインストールされているWebブラウザーの一覧を取得するプログラムのサンプルです。
ここではリストを配置したWindowsフォームアプリケーションを作成します。
ユーザーインターフェース
フォームのデザインは以下のようにします。
画面にはラベルとリストビューを配置します。
ソースコード
インストール済みのWebブラウザーの一覧を取得して表示するサンプルコードになります。
フォームのロードイベントで取得した結果をリストビューに設定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
using System; using System.Collections.Generic; using System.Windows.Forms; // 必要なusingを追加 using Microsoft.Win32; using System.Diagnostics; using System.Text.RegularExpressions; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } // ブラウザークラス public class Browser { public string Name { get; set; } public string Path { get; set; } public string Version { get; set; } } // ブラウザーのリスト private List<Browser> _browserList; // フォームロードイベント private void form1_Load(object sender, EventArgs e) { // リストビューの初期設定 listView1.Columns.Add("名前"); listView1.Columns.Add("パス"); listView1.Columns.Add("バージョン"); listView1.View = View.Details; // ブラウザーのリスト作成 CreateLocalBrowsersList(); // リストビューのアイテムを設定 listView1.Items.Clear(); foreach (var browser in _browserList) { ListViewItem item = listView1.Items.Add(browser.Name); item.SubItems.Add(browser.Path); item.SubItems.Add(browser.Version); } } // 先頭と末尾の「"」を削除 private string StripQuotes(string s) { if (s.EndsWith("\"") && s.StartsWith("\"")) { return s.Substring(1, s.Length - 2); } else { return s; } } // ブラウザーのリスト作成 private void CreateLocalBrowsersList() { try { _browserList = new List<Browser>(); /* Microsoft Edge 以外のブラウザー情報を取得する ************************************************************************/ // HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Clients\StartMenuInternetを開く RegistryKey browserKeys = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Clients\StartMenuInternet"); if (browserKeys == null) { // 上記のキーでレジストリが開けない場合はHKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternetを開く browserKeys = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Clients\StartMenuInternet"); } // サブキーを取得 var subKeyNames = browserKeys.GetSubKeyNames(); foreach (var browserName in subKeyNames) { var browser = new Browser(); // ブラウザーの名前 RegistryKey browserKey = browserKeys.OpenSubKey(browserName); browser.Name = (string)browserKey.GetValue(null); // ブラウザーのパス RegistryKey browserKeyPath = browserKey.OpenSubKey(@"shell\open\command"); browser.Path = StripQuotes(browserKeyPath.GetValue(null).ToString()); // ブラウザーのバージョン if (browser.Path != null) { browser.Version = FileVersionInfo.GetVersionInfo(browser.Path).FileVersion; } else { browser.Version = "unknown"; } // ブラウザーの追加 _browserList.Add(browser); } /* Microsoft Edge のブラウザー情報を取得する ************************************************************************/ RegistryKey edgeKey = Registry.CurrentUser.OpenSubKey( @"SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.MicrosoftEdge_8wekyb3d8bbwe"); if (edgeKey != null) { string version = "unknown"; // ブラウザーのバージョン RegistryKey edgeSchemaKey = edgeKey.OpenSubKey("Schemas"); if (edgeSchemaKey != null) { string packageFullName = edgeSchemaKey.GetValue("PackageFullName").ToString(); packageFullName = StripQuotes(packageFullName); Match match = Regex.Match(packageFullName, "(((([0-9.])\\d)+){1})"); if (match.Success) { version = match.Value; } } // ブラウザーの追加 _browserList.Add(new Browser { Name = "Microsoft Edge", Path = @"C:\Windows\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\MicrosoftEdge.exe", Version = version }); } } catch { // 例外は無視する } } } } |
実行結果
サンプルプログラムを実行します。
インストール済みのWebブラウザーの名前、パス、バージョンが取得できるのが確認できます。