public static System.Drawing.Icon SmallIcon(string fileName) { if (MonoHelper.IsUnix) { return(System.Drawing.Icon.ExtractAssociatedIcon(fileName)); } SHFILEINFO shinfo = new SHFILEINFO(); if (NativeMethods.SHGetFileInfo(fileName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), SHGFI_ICON | SHGFI_SMALLICON) == IntPtr.Zero) { Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error()); } System.Drawing.Icon tmp = System.Drawing.Icon.FromHandle(shinfo.hIcon); try { System.Drawing.Icon res = (System.Drawing.Icon)tmp.Clone(); tmp.Dispose(); NativeMethods.DestroyIcon(shinfo.hIcon); return(res); } catch {} return(null); }