Skip to main content

Extract icons of Installed Windows Application using C#. NET

Icon of Installed Windows Applications

First we need to figure out the location of icon for the installed windows application. This information is stored in registry at following locations -
1. Key name - HEKY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
   Value    - DisplayIcon

2. Key name - HKEY_CLASSES_ROOT\Installer\Products\{productID}
   Value - ProductIcon


first try to get location of icon from HEKY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall. Here if the value of DisplayIcon is null then try to fetch location of icon from HKEY_CLASSES_ROOT\Installer\Products\{productID}


Here is the sample code to read the icon -


using system.Drawing

//read HKEY_LOCAL_MACHINE

Icon ProductIcon;

private void ReadIcon()
{
   try
   {
   string uninstallKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
                using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(uninstallKey))
                {
                    foreach (string skName in rk.GetSubKeyNames())
                    {
                        using (RegistryKey sk = rk.OpenSubKey(skName))
                        {
                            try
                            {
                                if (sk.GetValue("DisplayName") != null)
                                {

                                    if (sk.GetValue("DisplayIcon") != null)
                                    {
                  ProductIcon = Icon.ExtractAssociatedIcon(sk.GetValue("DisplayIcon").ToString());
                                    }
                                    else
                                    {
                                        //get icon from HKEY_CLASSES_ROOT
                                   ProductIcon = GetIconForRoot(sk.GetValue("DisplayName").ToString());
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                              MessageBox.Show(ex.Message);
                            }
                     }
               }
    }
    catch(Exception ex)
    {
      MessageBox.Show(ex.Message);
    }
}

  private Icon GetIconForRoot(string productName)
  {
            string producticon = "";
            string InstallerKey = @"Installer\Products";
            using (RegistryKey installkeys = Registry.ClassesRoot.OpenSubKey(InstallerKey))
            {
                foreach (string name in installkeys.GetSubKeyNames())
                {
                    using (RegistryKey product = installkeys.OpenSubKey(name))
                    {
                        if (product.GetValue("ProductName") != null)
                        {
                            if (productName == product.GetValue("ProductName").ToString())
                            {
                                if (product.GetValue("ProductIcon") != null)
                                {
                                    producticon = product.GetValue("ProductIcon").ToString();

                                }
                            }
                        }
                    }
                }
            }
            if (Icon.ExtractAssociatedIcon(producticon) != null)
                return Icon.ExtractAssociatedIcon(producticon);
            else
                return null;
  }

Comments

Post a Comment

Popular posts from this blog

Show Image on canvas HTML5

Here is the sample code to select image from system and display it on html5 canvas and javascript: <input type= "file" id= "selectedImage" /> <canvas id= "myCanvas" width= "500" height= "500" > </canvas> Javascript code: $( "#selectedImage" ).change( function (e) { var URL = window .URL; var url = URL.createObjectURL(e.target.files[ 0 ]); img.src = url; img.onload = function () { var canvas = document .getElementById( "myCanvas" ); var ctx = canvas.getContext( "2d" ); var imgSize = calculateAspectRatioFit(img.width, img.height, canvas.clientWidth, canvas.clientHeight); ctx.clearRect( 0 , 0 , canvas.width, canvas.height); ctx.drawImage(img, 0 , 0 , imgSize.width, imgSize.height); } }); function calculateAspectRatioFit(srcWidth, srcHeight, maxWidth, maxHeight) { var ratio = Math .min(maxWi

Pass byte array from C# to C++ and vice-versa

Pass byte array from C# to C++                           If you want to pass a byte array to native DLL as parameter, you can use the Intptr to do this, please check the demo below. /C++ API code: TestDLL_API void TestArrayPara (BYTE * pArray, int nSize) { for ( int i= 0 ; i<nSize; i++) printf( "%d\n" , pArray[i]); } //C# code: class TestClass { [DllImport(@"TestDll.dll")] public static extern void TestArrayPara (IntPtr pArray, int nSize); public static void Test () { byte [] array = new byte [ 16 ]; for ( int i = 0 ; i < 16 ; i++) { array[i] = ( byte )(i + 97 ); } int size = Marshal.SizeOf(array[ 0 ]) * array.Length; IntPtr pnt = Marshal.AllocHGlobal(size); try { // Copy the array to unmanaged memory. Marshal.Copy(array, 0 , pnt, array

Display Tooltip for Combo Box item C#.NET Winforms

In windows form combo box control sometimes while adidng items dynamically we have items whose width is greater than width of combox box control. In this case for making UI more user friendly we can show tooltip over such item. Here is the sample C# code to display such tooltip:  Add a Tooltip control on the form.  Add following code : this . combo_box1 . DropDownStyle = System . Windows . Forms . ComboBoxStyle . DropDownList; this . combo_box1 . DrawMode = DrawMode . OwnerDrawFixed; this . combo_box1 . DrawItem += new DrawItemEventHandler(combo_box1_DrawItem); this . combo_box1 . DropDownClosed += new EventHandler(combo_box1_DropDownClosed); this . combo_box1 . MouseLeave += new EventHandler(combo_box1_Leave); void combo_box1_DrawItem( object sender, DrawItemEventArgs e) { if (e . Index < 0 ) { return ; } string text = combo_box1 . GetItemText(combo_box1 . Items[e . Index