public static System.Drawing.Image GetSmallIcon(string file)
        {
            FileIcon.SHFILEINFO shinfo = new FileIcon.SHFILEINFO();
            IntPtr hImgLarge           = FileIcon.SHGetFileInfo(file, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), FileIcon.SHGFI_ICON | FileIcon.SHGFI_SMALLICON);

            return(System.Drawing.Icon.FromHandle(shinfo.hIcon).ToBitmap());
        }
 public Boolean BuildTreeFromPathData(String RootPath, TreeNode NodeParent)
 {
     try
     {
         NodeParent.Tag = RootPath;
         foreach (string fil in System.IO.Directory.GetDirectories(RootPath).OrderBy(f => f))
         {
             ImageList.Images.Add(fil, FileIcon.GetLargeIcon(fil));
             System.GC.Collect();
             NodeParent.Nodes.Add(fil, new DirectoryInfo(fil).Name);
             BuildTreeFromPathData(fil, NodeParent.LastNode);
         }
         return(true);
     }
     catch (Exception ex)
     {
         Debug.WriteLine(ex.ToString());
         //MessageBox.Show(ex.ToString() + "Build");
         return(false);
     }
 }
        public Bitmap addImage(string strPath, string strCurrentDir)
        {
            string strFilPath = strPath;

            try
            {
                if (OSIco != null)
                {
                    if (System.IO.Directory.Exists(strPath) == true && (new DirectoryInfo(strPath)).Name.EndsWith("‰ƒ"))//DrivePath
                    {
                        return(DriveIcon(strPath));
                    }
                    if (System.IO.Directory.Exists(strPath) == true && strPath == strCurrentDir)//Open Directory
                    {
                        return(com.prepareImage(Bitmap.FromHicon(OSIco[68].Handle), FollowPallet));
                    }
                    if (System.IO.Directory.Exists(strPath) == true && strPath != strCurrentDir)//Directory
                    {
                        return(com.prepareImage(Bitmap.FromHicon(OSIco[69].Handle), FollowPallet));
                    }
                    Int32 intIconIndex;
                    if (strPath.Contains(',') && Int32.TryParse(strPath.Split(',').Last(), out intIconIndex))                       //Icon Extraction
                    {
                        return(Bitmap.FromHicon(TsudaKageyu.IconUtil.Split(new Icon(strPath.Split(',')[0]))[intIconIndex].Handle)); //, true);
                    }
                    if (!System.IO.File.Exists(strPath))                                                                            //Error
                    {
                        return(com.prepareImage(Bitmap.FromHicon(OSIco[52].Handle), FollowPallet));
                    }
                    if (strPath.EndsWith("lnk", true, System.Globalization.CultureInfo.CurrentUICulture))
                    {
                        Bitmap   ink = new Bitmap(1, 1);
                        Graphics g   = Graphics.FromImage(ink);
                        ShortCut lnk = new ShortCut(strPath);
                        if (ink.Width + ink.Height == 2)
                        {
                            ink = new Bitmap(addImage(com.toSystemPath(lnk.TargetFile), ""), 32, 32);
                        }
                        if (!(File.ReadAllLines(strFilPath).Count() >= 5 && File.ReadAllLines(strFilPath)[4] == "Sys"))
                        {
                            g.DrawImage(Bitmap.FromHicon(OSIco[29].Handle), 0, ink.Height - OSIco[29].Height);
                        }
                        return(com.prepareImage(ink, FollowPallet));
                    }
                    if (strPath.EndsWith("U95exe", true, System.Globalization.CultureInfo.CurrentUICulture) || strPath.EndsWith("U95com", true, System.Globalization.CultureInfo.CurrentUICulture))
                    {
                        return(null);// Properties.Resources.Attention;
                    }
                    if ((ViewType == ExplorerType.ControlPanel && strPath.EndsWith("cpl", true, System.Globalization.CultureInfo.CurrentUICulture)) || strPath.EndsWith("exe", true, System.Globalization.CultureInfo.CurrentUICulture))
                    {
                        TsudaKageyu.IconExtractor i = new TsudaKageyu.IconExtractor(strPath); // addImage(CDrivePath & File.ReadAllLines(strPath).First, "")
                                                                                              // MessageBox.Show(strPath)
                        if (i.Count > 0)
                        {
                            return(com.prepareImage(i.GetIcon(i.Count - 1).ToBitmap(), FollowPallet));
                        }
                        else
                        {
                            return(com.prepareImage(Bitmap.FromHicon(OSIco[70].Handle), FollowPallet));  // Return setSetting.OSIco(Int(ReadAllLines(strPath).Last)).ToBitmap
                        }
                    }
                    if (strPath.EndsWith(".U95ico", true, System.Globalization.CultureInfo.CurrentUICulture))
                    {
                        return(com.prepareImage(strPath));
                    }
                    if (strPath.EndsWith(".txt", true, System.Globalization.CultureInfo.CurrentUICulture))
                    {
                        return(com.prepareImage(Bitmap.FromHicon(OSIco[42].Handle), FollowPallet));
                    }
                    if (strPath.EndsWith(".msi", true, System.Globalization.CultureInfo.CurrentUICulture))
                    {
                        return(com.prepareImage(Bitmap.FromHicon(OSIco[46].Handle), FollowPallet));
                    }
                    return(com.prepareImage(Bitmap.FromHicon(OSIco[0].Handle), FollowPallet));
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
            }
            if (strFilPath.EndsWith(".jpg", StringComparison.CurrentCultureIgnoreCase))
            {
                return(ScaleImage(strFilPath, 48, 48));
            }
            if ((OSIco == null) || OSIco.Count() < 1)
            {
                return((Bitmap)FileIcon.GetLargeIcon(strFilPath));
            }
            else
            {
                return(null);
            }
        }