18

ユーザーの既定のブラウザを文字列として返すメソッドはありますか?

私が探しているものの例:

System.out.println(getDefaultBrowser()); // prints "Chrome"
4

1 に答える 1

21

この方法は、レジストリ[1]と正規表現を使用して既定のブラウザーを文字列として抽出することで実現できます。私が知っているこれを行うための「よりクリーンな」方法はありません。

public static String getDefaultBrowser()
{
    try
    {
        // Get registry where we find the default browser
        Process process = Runtime.getRuntime().exec("REG QUERY HKEY_CLASSES_ROOT\\http\\shell\\open\\command");
        Scanner kb = new Scanner(process.getInputStream());
        while (kb.hasNextLine())
        {
            // Get output from the terminal, and replace all '\' with '/' (makes regex a bit more manageable)
            String registry = (kb.nextLine()).replaceAll("\\\\", "/").trim();

            // Extract the default browser
            Matcher matcher = Pattern.compile("/(?=[^/]*$)(.+?)[.]").matcher(registry);
            if (matcher.find())
            {
                // Scanner is no longer needed if match is found, so close it
                kb.close();
                String defaultBrowser = matcher.group(1);

                // Capitalize first letter and return String
                defaultBrowser = defaultBrowser.substring(0, 1).toUpperCase() + defaultBrowser.substring(1, defaultBrowser.length());
                return defaultBrowser;
            }
        }
        // Match wasn't found, still need to close Scanner
        kb.close();
    } catch (Exception e)
    {
        e.printStackTrace();
    }
    // Have to return something if everything fails
    return "Error: Unable to get default browser";
}

が呼び出されるたびgetDefaultBrowser()に、Windows の既定のブラウザーが返されるようになりました。

テスト済みブラウザ:

  • Google Chrome (関数は「Chrome」を返します)
  • Mozilla Firefox (関数は「Firefox」を返します)
  • Opera (関数は「Opera」を返します)

正規表現の説明 ( /(?=[^/]*$)(.+?)[.]):

  • /(?=[^/]*$)/文字列の最後に出現するものに一致
  • [.].ファイル拡張子の
  • (.+?)これらの 2 つの一致した文字の間の文字列をキャプチャします。

registry正規表現に対してテストする前に rightの値を見ると、これがどのようにキャプチャされるかがわかります (キャプチャされているものを太字にしています)。

(デフォルト) REG_SZ "C:/Program Files (x86)/Mozilla Firefox/ firefox .exe" -osint -url "%1"


[1] Windows のみ。私は Mac または Linux コンピューターにアクセスできませんが、インターネットを見回すとcom.apple.LaunchServices.plist、Mac に既定のブラウザーの値が保存されていると思います。Linux では、コマンドxdg-settings get default-web-browserを実行して既定のブラウザーを取得できると思います。私はそれについて間違っているかもしれませんが、それらにアクセスできる誰かが私のためにテストして、それらを実装する方法についてコメントしてくれるでしょうか?

于 2013-04-06T15:53:58.627 に答える