private static Icon GetIcon(IntPtr pidl, uint flags = 0) { PInvoke.SHFILEINFO shi = new PInvoke.SHFILEINFO(); flags = flags | PInvoke.SHGFI_ICON | PInvoke.SHGFI_ADDOVERLAYS | PInvoke.SHGFI_PIDL; IntPtr hIcon = PInvoke.SHGetFileInfo(pidl, 0, out shi, (uint)(Marshal.SizeOf(shi)), flags); if (shi.hIcon == IntPtr.Zero) { return(null); } Icon icon = (Icon)Icon.FromHandle(shi.hIcon).Clone(); PInvoke.DestroyIcon(shi.hIcon); return(icon); }
private static Icon GetIcon(string fileName, uint flags = 0) { if (string.IsNullOrWhiteSpace(fileName)) { return(null); } PInvoke.SHFILEINFO shi = new PInvoke.SHFILEINFO(); flags = flags | PInvoke.SHGFI_ICON | PInvoke.SHGFI_ADDOVERLAYS; IntPtr hIcon = PInvoke.SHGetFileInfo(fileName, 0, out shi, (uint)(Marshal.SizeOf(shi)), flags); if (shi.hIcon == IntPtr.Zero) { return(null); } Icon icon = (Icon)Icon.FromHandle(shi.hIcon).Clone(); PInvoke.DestroyIcon(shi.hIcon); return(icon); }