Marko
Marko

Reputation: 161

How to get icon of default browser in C#?

I have a button that says "Open in browser". I would like to rename it to "Open" and show default browser's icon next to it.

If default browser is firefox, then I want firefox icon in my button. If default browser is chrome, then I want chrome icon.

How can I get the default browsers icon?

If it's different for every version of windows, then I need window 7 version.

Upvotes: 4

Views: 1698

Answers (2)

Marko
Marko

Reputation: 161

I have changed the code a bit and here is my version.

using System;
using Microsoft.Win32;
using System.Drawing;

namespace Namespace
{
public static class DefaultSystemBrowser
{
    private static bool initialized = false;
    private static string path = null;

    public static string Path
    {
        get 
        {
            CheckForErrors();

            return path;
        }
    }

    public static Icon Icon
    {
        get {
            CheckForErrors();

            return Icon.ExtractAssociatedIcon( path );
        }
    }

    public static Bitmap Bitmap
    {
        get
        {
            CheckForErrors();

            return Icon.ExtractAssociatedIcon( path ).ToBitmap();
        }
    }

    private static void CheckForErrors()
    {
        if ( !initialized )
            throw new InvalidOperationException( "You can't use DefaultSystemBrowser class before you call Determine()." );
        if ( ErrorMessage != null )
            throw new InvalidOperationException( "You can't use DefaultSystemBrowser class if call to Determine() resulted in error." );
    }

    /// <summary>
    /// Null if no error occured, error description otherwise.
    /// </summary>
    public static string ErrorMessage
    {
        get;
        private set;
    }

    /// <summary>
    /// Finds out all information about current default browser. You can call this method every time you want to find out default browser.
    /// </summary>
    public static void Determine()
    {
        path = String.Empty;
        initialized = true;

        RegistryKey regKey = null;
        ErrorMessage = null;

        try
        {
            //set the registry key we want to open
            regKey = Registry.ClassesRoot.OpenSubKey( "HTTP\\shell\\open\\command", false );

            //get rid of the enclosing quotes
            path = regKey.GetValue( null ).ToString().ToLower().Replace( "" + (char) 34, "" );

            //check to see if the value ends with .exe (this way we can remove any command line arguments)
            if ( !path.EndsWith( "exe" ) )
                //get rid of all command line arguments (anything after the .exe must go)
                path = path.Substring( 0, path.LastIndexOf( ".exe" ) + 4 );

            initialized = true;
        }
        catch ( Exception ex )
        {
            ErrorMessage = string.Format( "ERROR: An exception of type: {0} occurred in method: {1} in the following module: {2}", ex.GetType(), ex.TargetSite, typeof( DefaultSystemBrowser ) );
        }
        finally
        {
            //check and see if the key is still open, if so
            //then close it
            if ( regKey != null )
                regKey.Close();
        }
    }

}
}

Here is how I am using the code:

        DefaultSystemBrowser.Determine();
        if ( DefaultSystemBrowser.ErrorMessage == null )
        {
            btnOpenInBrowser.Image = DefaultSystemBrowser.Bitmap;
        }
        else
        {
            btnOpenInBrowser.Image = Properties.Resources.firefox_24_noshadow;
        }

Upvotes: 0

Chris
Chris

Reputation: 8647

Embed a blank htm or html file with your application (or create it)

Then call the Icon.ExtractAssociatedIcon method on this file.

It will return default browser icon .

Upvotes: 3

Related Questions