C#擷取檔案格式表徵圖分支機構應用程式表徵圖

來源:互聯網
上載者:User

標籤:des   style   blog   color   io   檔案   ar   div   

 class SystemIcon    {        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]        public struct SHFILEINFO        {            public IntPtr hIcon;            public int iIcon;            public uint dwAttributes;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]            public string szDisplayName;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]            public string szTypeName;        }        [DllImport("Shell32.dll", EntryPoint = "SHGetFileInfo", SetLastError = true, CharSet = CharSet.Auto)]        public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbFileInfo, uint uFlags);        [DllImport("User32.dll", EntryPoint = "DestroyIcon")]        public static extern int DestroyIcon(IntPtr hIcon);        #region API 參數的常量定義        public enum FileInfoFlags : uint        {            SHGFI_ICON = 0x000000100,  //  get icon            SHGFI_DISPLAYNAME = 0x000000200,  //  get display name            SHGFI_TYPENAME = 0x000000400,  //  get type name            SHGFI_ATTRIBUTES = 0x000000800,  //  get attributes            SHGFI_ICONLOCATION = 0x000001000,  //  get icon location            SHGFI_EXETYPE = 0x000002000,  //  return exe type            SHGFI_SYSICONINDEX = 0x000004000,  //  get system icon index            SHGFI_LINKOVERLAY = 0x000008000,  //  put a link overlay on icon            SHGFI_SELECTED = 0x000010000,  //  show icon in selected state            SHGFI_ATTR_SPECIFIED = 0x000020000,  //  get only specified attributes            SHGFI_LARGEICON = 0x000000000,  //  get large icon            SHGFI_SMALLICON = 0x000000001,  //  get small icon            SHGFI_OPENICON = 0x000000002,  //  get open icon            SHGFI_SHELLICONSIZE = 0x000000004,  //  get shell size icon            SHGFI_PIDL = 0x000000008,  //  pszPath is a pidl            SHGFI_USEFILEATTRIBUTES = 0x000000010,  //  use passed dwFileAttribute            SHGFI_ADDOVERLAYS = 0x000000020,  //  apply the appropriate overlays            SHGFI_OVERLAYINDEX = 0x000000040   //  Get the index of the overlay        }        public enum FileAttributeFlags : uint        {            FILE_ATTRIBUTE_READONLY = 0x00000001,            FILE_ATTRIBUTE_HIDDEN = 0x00000002,            FILE_ATTRIBUTE_SYSTEM = 0x00000004,            FILE_ATTRIBUTE_DIRECTORY = 0x00000010,            FILE_ATTRIBUTE_ARCHIVE = 0x00000020,            FILE_ATTRIBUTE_DEVICE = 0x00000040,            FILE_ATTRIBUTE_NORMAL = 0x00000080,            FILE_ATTRIBUTE_TEMPORARY = 0x00000100,            FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200,            FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400,            FILE_ATTRIBUTE_COMPRESSED = 0x00000800,            FILE_ATTRIBUTE_OFFLINE = 0x00001000,            FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000,            FILE_ATTRIBUTE_ENCRYPTED = 0x00004000        }        #endregion        /// <summary>        /// 擷取檔案類型的關聯表徵圖        /// </summary>        /// <param name="fileName">檔案類型的副檔名或檔案的絕對路徑</param>        /// <param name="isLargeIcon">是否返回大表徵圖</param>        /// <returns>擷取到的表徵圖</returns>        public static Icon GetIcon(string fileName, bool isLargeIcon)        {            SHFILEINFO shfi = new SHFILEINFO();            IntPtr hI;            if (isLargeIcon)                hI = SHGetFileInfo(fileName, 0, ref shfi, (uint)Marshal.SizeOf(shfi), (uint)FileInfoFlags.SHGFI_ICON | (uint)FileInfoFlags.SHGFI_USEFILEATTRIBUTES | (uint)FileInfoFlags.SHGFI_LARGEICON);            else                hI = SHGetFileInfo(fileName, 0, ref shfi, (uint)Marshal.SizeOf(shfi), (uint)FileInfoFlags.SHGFI_ICON | (uint)FileInfoFlags.SHGFI_USEFILEATTRIBUTES | (uint)FileInfoFlags.SHGFI_SMALLICON);            Icon icon = Icon.FromHandle(shfi.hIcon).Clone() as Icon;            DestroyIcon(shfi.hIcon); //釋放資源            return icon;        }        /// <summary>          /// 擷取檔案夾表徵圖        /// </summary>          /// <returns>表徵圖</returns>          public static Icon GetDirectoryIcon(bool isLargeIcon)        {            SHFILEINFO _SHFILEINFO = new SHFILEINFO();            IntPtr _IconIntPtr;            if (isLargeIcon)            {                _IconIntPtr = SHGetFileInfo(@"", 0, ref _SHFILEINFO, (uint)Marshal.SizeOf(_SHFILEINFO), ((uint)FileInfoFlags.SHGFI_ICON | (uint)FileInfoFlags.SHGFI_LARGEICON));            }            else            {                _IconIntPtr = SHGetFileInfo(@"", 0, ref _SHFILEINFO, (uint)Marshal.SizeOf(_SHFILEINFO), ((uint)FileInfoFlags.SHGFI_ICON | (uint)FileInfoFlags.SHGFI_SMALLICON));            }            if (_IconIntPtr.Equals(IntPtr.Zero)) return null;            Icon _Icon = System.Drawing.Icon.FromHandle(_SHFILEINFO.hIcon);            return _Icon;        }    }

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.