public static extern IntPtr SHGetFileInfo( string pszPath, int dwFileAttributes, ref SHFILEINFO psfi, int cbFileInfo, int uFlags );
public static Icon ExtractAssociatedFileIcon16(string fileName) { const int SHGFI_ICON = 0x100; const int SHGFI_SMALLICON = 0x1; const int SHGFI_USEFILEATTRIBUTES = 0x10; const int FILE_ATTRIBUTE_NORMAL = 0x80; var info = new SHFILEINFO(); Shell32.SHGetFileInfo(fileName, FILE_ATTRIBUTE_NORMAL, ref info, Marshal.SizeOf(info), SHGFI_ICON | SHGFI_SMALLICON); try { return Icon.FromHandle(info.hIcon); } catch { Shell32.SHGetFileInfo(fileName, FILE_ATTRIBUTE_NORMAL, ref info, Marshal.SizeOf(info), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES); try { return Icon.FromHandle(info.hIcon); } catch { return null; } } }
public static string GetFileType(string fileName, bool dir, bool useExtensionOnly) { const int SHGFI_USEFILEATTRIBUTES = 0x10; const int SHGFI_TYPENAME = 0x400; const int FILE_ATTRIBUTE_NORMAL = 0x80; const int FILE_ATTRIBUTE_DIR = 0x10; var attr = dir ? FILE_ATTRIBUTE_DIR | FILE_ATTRIBUTE_NORMAL : FILE_ATTRIBUTE_NORMAL; var req = useExtensionOnly ? SHGFI_USEFILEATTRIBUTES | SHGFI_TYPENAME : SHGFI_TYPENAME; var info = new SHFILEINFO(); var ret = Shell32.SHGetFileInfo(fileName, attr, ref info, Marshal.SizeOf(info), req); return info.szTypeName; }