public static Icon GetFolderIcon(IconSize size, FolderType folderType)
        {
            uint flags = Shell32Wrapper.SHGFI_ICON | Shell32Wrapper.SHGFI_USEFILEATTRIBUTES;

            if (FolderType.Open == folderType)
            {
                flags += Shell32Wrapper.SHGFI_OPENICON;
            }

            if (IconSize.Small == size)
            {
                flags += Shell32Wrapper.SHGFI_SMALLICON;
            }
            else
            {
                flags += Shell32Wrapper.SHGFI_LARGEICON;
            }

            Shell32Wrapper.SHFILEINFO shfi = new Shell32Wrapper.SHFILEINFO();
            Shell32Wrapper.SHGetFileInfo(null, Shell32Wrapper.FILE_ATTRIBUTE_DIRECTORY, ref shfi, (uint)Marshal.SizeOf(shfi), flags);

            Icon.FromHandle(shfi.hIcon);

            Icon icon = (Icon)Icon.FromHandle(shfi.hIcon).Clone();

            DestroyIcon(shfi.hIcon);

            return(icon);
        }
        public static string GetFileType(string ext)
        {
            Shell32Wrapper.SHFILEINFO shfi = new Shell32Wrapper.SHFILEINFO();
            uint flags = Shell32Wrapper.SHGFI_TYPENAME | Shell32Wrapper.SHGFI_USEFILEATTRIBUTES;

            Shell32Wrapper.SHGetFileInfo(ext, (uint)0, ref shfi, (uint)Marshal.SizeOf(shfi), flags);

            return(shfi.szTypeName.Trim());
        }
        public static Icon GetFileIcon(string name, IconSize size)
        {
            Shell32Wrapper.SHFILEINFO shfi = new Shell32Wrapper.SHFILEINFO();
            uint flags = Shell32Wrapper.SHGFI_ICON | Shell32Wrapper.SHGFI_USEFILEATTRIBUTES;

            if (IconSize.Small == size)
            {
                flags += Shell32Wrapper.SHGFI_SMALLICON;
            }
            else
            {
                flags += Shell32Wrapper.SHGFI_LARGEICON;
            }

            Shell32Wrapper.SHGetFileInfo(name, Shell32Wrapper.FILE_ATTRIBUTE_NORMAL, ref shfi, (uint)Marshal.SizeOf(shfi), flags);

            Icon icon = (Icon)Icon.FromHandle(shfi.hIcon).Clone();

            DestroyIcon(shfi.hIcon);

            return(icon);
        }