protected override Bitmap KeyToBitmap(string key, IconSize size)
        {
            bool isDiskFolder = key.EndsWith(":\\");

            string ext = PathEx.GetExtension(key);

            if ((ext != "" && ext != key && imageFilter.IndexOf(ext) != -1))
            {
                return(GetFileIcon(FileSystemInfoEx.FromString(key).PIDL.Ptr, size));
            }
            else

            if (key == "" || key.StartsWith("."))     //Extension
            {
                return(GetFileIcon(key, size));
            }
            else
            {
                switch (size)
                {
                case IconSize.thumbnail:
                case IconSize.jumbo:
                    return(loadJumbo(key, isDiskFolder));

                case IconSize.extraLarge:
                    _imgList.ImageListSize = SysImageListSize.extraLargeIcons;
                    return(_imgList.Icon(_imgList.IconIndex(key, isDiskFolder)).ToBitmap());

                //case IconSize.large :
                //    _imgList.ImageListSize = SysImageListSize.largeIcons;
                //    return _imgList.Icon(_imgList.IconIndex(key, isDiskFolder)).ToBitmap();
                //case IconSize.small :
                //    _imgList.ImageListSize = SysImageListSize.smallIcons;
                //    return _imgList.Icon(_imgList.IconIndex(key, isDiskFolder)).ToBitmap();
                default:
                    try
                    {
                        return(GetFileIcon(key, size));
                    }
                    catch { return(KeyToBitmap(UCUtils.GetProgramPath(), size)); }
                }
            }
        }
        //private static Bitmap loadJumbo(string lookup, bool forceLoadFromDisk, IconSize size)
        //{
        //    SysImageList _imgList = isVistaUp() && ((size == IconSize.thumbnail) || (size == IconSize.jumbo)) ? _imgListJumbo : _imgListXL;

        //    try
        //    {
        //        Icon icon = _imgList.Icon(_imgList.IconIndex(lookup, forceLoadFromDisk));
        //        Bitmap bitmap = icon.ToBitmap();
        //        icon.Dispose();

        //        System.Drawing.Color empty = System.Drawing.Color.FromArgb(0, 0, 0, 0);

        //        if (bitmap.Width < 256)
        //            bitmap = resizeImage(bitmap, new System.Drawing.Size(256, 256), 0);
        //        else if (bitmap.GetPixel(100, 100) == empty && bitmap.GetPixel(200, 200) == empty && bitmap.GetPixel(200, 200) == empty)
        //        {
        //            _imgList.ImageListSize = SysImageListSize.largeIcons;
        //            bitmap = resizeJumbo(_imgList.Icon(_imgList.IconIndex(lookup)).ToBitmap(), new System.Drawing.Size(200, 200), 5);
        //        }

        //        return bitmap;
        //    }
        //    catch
        //    {
        //        return GetFileIcon(lookup, IconSize.large);
        //    }

        //}

        protected override Bitmap KeyToBitmap(string key, IconSize size)
        {
            try
            {
                bool isDiskFolder = key.EndsWith(":\\");
                bool isTemp       = key.Equals(tempPath);

                string ext = PathEx.GetExtension(key).ToLower();

                if (!ext.StartsWith("."))
                {
                    if (specialExtFilter.Split(',').Contains(key))
                    {
                        switch (ext)
                        {
                        case ".exe":
                            ShellDll.PIDL pidlLookup = FileSystemInfoEx.FromString(key).PIDL;
                            try
                            {
                                return(GetFileIcon(pidlLookup.Ptr, size));
                            }
                            finally { if (pidlLookup != null)
                                      {
                                          pidlLookup.Free();
                                      }
                            }

                        case ".lnk":
                            using (ShellLink sl = new ShellLink(key))
                                switch (size)
                                {
                                case IconSize.small:
                                    return(sl.SmallIcon.ToBitmap());

                                default: return(sl.LargeIcon.ToBitmap());
                                }
                        }
                    }
                }



                if (fileBasedFSFilter.Split(',').Contains(key))
                {
                    return(GetFileBasedFSBitmap(key, size));
                }
                else
                if (key == "" || key.StartsWith("."))     //Extension
                {
                    return(GetFileIcon(key, size));
                }
                else
                if (IsSpecialFolder(key))
                {
                    ShellDll.PIDL pidlLookup = FileSystemInfoEx.FromString(key).PIDL;
                    try
                    {
                        return(GetFileIcon(pidlLookup.Ptr, size));
                    }
                    finally { if (pidlLookup != null)
                              {
                                  pidlLookup.Free();
                              }
                    }
                }
                else
                {
                    switch (size)
                    {
                    case IconSize.thumbnail:
                        return(loadThumbnail(key, isDiskFolder || isTemp));

                    //case IconSize.jumbo:
                    //case IconSize.extraLarge:
                    //    return loadJumbo(key, isDiskFolder || isTemp, size);
                    //case IconSize.large :
                    //    _imgList.ImageListSize = SysImageListSize.largeIcons;
                    //    return _imgList.Icon(_imgList.IconIndex(key, isDiskFolder)).ToBitmap();
                    //case IconSize.small :
                    //    _imgList.ImageListSize = SysImageListSize.smallIcons;
                    //    return _imgList.Icon(_imgList.IconIndex(key, isDiskFolder)).ToBitmap();
                    default:
                        try
                        {
                            return(GetFileIcon(key, size));
                        }
                        catch { return(KeyToBitmap(UCUtils.GetProgramPath(), size)); }
                    }
                }
            }
            catch { return(new Bitmap(1, 1)); }
        }