Getting default icon for a file type 
Author Message
 Getting default icon for a file type

Does anyone know how to get the icon used for a given file type? For e.g.,
if I have a box containing all the files in a directory, I would like Word
files to have the Word icon, mp3 files to have their default icon, etc. etc.

Thanks,

--
Mike



Fri, 03 Sep 2004 08:22:48 GMT  
 Getting default icon for a file type
Here's a class that does the job (not my own work, save for a few
modifications, but pulled from a posting in the MS groups).  General usage
is:

Icon myicon = ExtractIcon.GetIcon(mypath, true, false);

...but see comments in the code below.

Hope it helps.

Rob.

 public class ExtractIcon
 {
  [DllImport("Shell32.dll")]
  private static extern int  SHGetFileInfo
   (
   string pszPath,
   uint dwFileAttributes,
   out SHFILEINFO psfi,
   uint cbfileInfo,
   SHGFI uFlags
   );

  [StructLayout(LayoutKind.Sequential)]
   private struct SHFILEINFO
  {
   public SHFILEINFO(bool b)
   {
    hIcon=IntPtr.Zero;iIcon=0;dwAttributes=0;szDisplayName="";szTypeName="";
   }
   public IntPtr hIcon;
   public int iIcon;
   public uint dwAttributes;
   [MarshalAs(UnmanagedType.LPStr, SizeConst=260)]
   public string szDisplayName;
   [MarshalAs(UnmanagedType.LPStr, SizeConst=80)]
   public string szTypeName;
  };

  private ExtractIcon()
  {
  }

  private enum SHGFI
  {
   SmallIcon   = 0x00000001,
   OpenIcon   = 0x00000002,
   LargeIcon   = 0x00000000,
   Icon    = 0x00000100,
   DisplayName   = 0x00000200,
   Typename   = 0x00000400,
   SysIconIndex  = 0x00004000,
   LinkOverlay = 0x00008000,
   UseFileAttributes = 0x00000010
  }

  /// <summary>
  /// Get the associated Icon for a file or application, this method always
returns
  /// an icon.  If the strPath is invalid or there is no idonc the default
icon is returned
  /// </summary>
  /// <param name="strPath">full path to the file or directory</param>
  /// <param name="bSmall">if true, the 16x16 icon is returned otherwise the
32x32</param>
  /// <param name="bOpen">if true, and strPath is a folder, returns the
'open' icon rather than the 'closed'</param>
  /// <returns></returns>
  public static Icon GetIcon(string strPath, bool bSmall, bool bOpen)
  {
   SHFILEINFO info = new SHFILEINFO(true);
   int cbFileInfo = Marshal.SizeOf(info);
   SHGFI flags;
   if (bSmall)
    flags = SHGFI.Icon|SHGFI.SmallIcon;
   else
    flags = SHGFI.Icon|SHGFI.LargeIcon;
   if (bOpen) flags = flags|SHGFI.OpenIcon;

   SHGetFileInfo(strPath, 256, out info,(uint)cbFileInfo, flags);
   return Icon.FromHandle(info.hIcon);
  }
 }//end class



Fri, 03 Sep 2004 08:54:45 GMT  
 Getting default icon for a file type
That did the trick very nicely, thanks a lot :)

--
Mike


Quote:
> Here's a class that does the job (not my own work, save for a few
> modifications, but pulled from a posting in the MS groups).  General usage
> is:



Sun, 05 Sep 2004 04:38:19 GMT  
 
 [ 3 post ] 

 Relevant Pages 

1. Getting default icon for a file type

2. Default Icon Hell: MFC Icon appears even after file and IDR_MAINFRAME changed

3. Change Default File Type to Source File?

4. Change Default File Type to Source File?

5. Default icon setting with user defined file extension

6. Change default new file type to .cpp

7. Default file type action

8. CFileDialog How to set default file type list

9. Default File Types

10. Change default new file type to .cpp

11. Help with getting an Icon from a file

12. getting icon from file extension

 

 
Powered by phpBB® Forum Software