Reputation: 161
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
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
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