How to find default web browser using C#?

前端 未结 7 1072
长发绾君心
长发绾君心 2020-11-27 05:07

Is there a way I can find out the name of my default web browser using C#? (Firefox, Google Chrome, etc..)

Can you please show me with an example?

7条回答
  •  被撕碎了的回忆
    2020-11-27 05:41

    The currently accepted answer does not work for me when internet explorer is set as the default browser. On my Windows 7 PC the HKEY_CLASSES_ROOT\http\shell\open\command is not updated for IE. The reason behind this might be changes introduced starting from Windows Vista in how default programs are handled.

    You can find the default chosen browser in the registry key, Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice, with value Progid. (thanks goes to Broken Pixels)

    const string userChoice = @"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice";
    string progId;
    BrowserApplication browser;
    using ( RegistryKey userChoiceKey = Registry.CurrentUser.OpenSubKey( userChoice ) )
    {
        if ( userChoiceKey == null )
        {
            browser = BrowserApplication.Unknown;
            break;
        }
        object progIdValue = userChoiceKey.GetValue( "Progid" );
        if ( progIdValue == null )
        {
            browser = BrowserApplication.Unknown;
            break;
        }
        progId = progIdValue.ToString();
        switch ( progId )
        {
            case "IE.HTTP":
                browser = BrowserApplication.InternetExplorer;
                break;
            case "FirefoxURL":
                browser = BrowserApplication.Firefox;
                break;
            case "ChromeHTML":
                browser = BrowserApplication.Chrome;
                break;
            case "OperaStable":
                browser = BrowserApplication.Opera;
                break;
            case "SafariHTML":
                browser = BrowserApplication.Safari;
                break;
            case "AppXq0fevzme2pys62n3e0fbqa7peapykr8v":
                browser = BrowserApplication.Edge;
                break;
            default:
                browser = BrowserApplication.Unknown;
                break;
        }
    }
    

    In case you also need the path to the executable of the browser you can access it as follows, using the Progid to retrieve it from ClassesRoot.

    const string exeSuffix = ".exe";
    string path = progId + @"\shell\open\command";
    FileInfo browserPath;
    using ( RegistryKey pathKey = Registry.ClassesRoot.OpenSubKey( path ) )
    {
        if ( pathKey == null )
        {
            return;
        }
    
        // Trim parameters.
        try
        {
            path = pathKey.GetValue( null ).ToString().ToLower().Replace( "\"", "" );
            if ( !path.EndsWith( exeSuffix ) )
            {
                path = path.Substring( 0, path.LastIndexOf( exeSuffix, StringComparison.Ordinal ) + exeSuffix.Length );
                browserPath = new FileInfo( path );
            }
        }
        catch
        {
            // Assume the registry value is set incorrectly, or some funky browser is used which currently is unknown.
        }
    }
    

提交回复
热议问题