国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#中如何獲取文件圖標(biāo)

2020-01-24 01:13:10
字體:
供稿:網(wǎng)友

 本文給大家介紹如何去獲取一個(gè)文件的關(guān)聯(lián)圖標(biāo)呢?現(xiàn)總結(jié)如下:

  首先明確問題:獲取一個(gè)文件的關(guān)聯(lián)圖標(biāo)或者是某個(gè)類型文件的顯示圖標(biāo)。

  在網(wǎng)上搜了一圈,發(fā)現(xiàn)方法還是比較多的,但是應(yīng)用C#進(jìn)行獲取的方法不多。我選擇一種用.Net庫的方法。

 使用的類:

    System.Drawing.Icon ,位于System.Drawing 命名空間。

  具體方法:  

    System.Drawing.Icon 類中的靜態(tài)方法:public static Icon ExtractAssociatedIcon(string filePath)

  此方法接收一個(gè)文件路徑,返回一個(gè) Icon 類型的對象。此對象既是指定文件的 Icon 圖標(biāo)對象。

  此 Icon 類提供了 Save 方法,可以將 Icon 文件寫入流中,進(jìn)而保存至硬盤文件。

  當(dāng)然要在程序中顯示也是可以的,Icon 類提供了 ToBitmap 方法,可以將 Icon 文件轉(zhuǎn)換為 Bitmap。Bitmap 就可以在 PictureBox 中顯示了。

  如果要根據(jù)后綴名來獲取文件圖標(biāo),那要怎么辦呢?我想了一個(gè)比較笨的辦法。看代碼~

string fileName = "tmp." + houzhuiming;    File.Create(fileName).Close();    Image img = System.Drawing.Icon.ExtractAssociatedIcon(fileName).ToBitmap();    File.Delete(fileName);

  如此,新建一個(gè)指定后綴名的文件,獲取圖標(biāo)后直接刪除,就能獲得指定文件后綴名的圖標(biāo)了。嘻嘻~

下面給大家分享一段代碼介紹C#獲取文件關(guān)聯(lián)圖標(biāo)

using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;using System.Drawing;using Microsoft.Win32;namespace ifmdp.DeviceManager{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 參數(shù)的常量定義public enum FileInfoFlags : uint{SHGFI_ICON = 0x000000100, // get iconSHGFI_DISPLAYNAME = 0x000000200, // get display nameSHGFI_TYPENAME = 0x000000400, // get type nameSHGFI_ATTRIBUTES = 0x000000800, // get attributesSHGFI_ICONLOCATION = 0x000001000, // get icon locationSHGFI_EXETYPE = 0x000002000, // return exe typeSHGFI_SYSICONINDEX = 0x000004000, // get system icon indexSHGFI_LINKOVERLAY = 0x000008000, // put a link overlay on iconSHGFI_SELECTED = 0x000010000, // show icon in selected stateSHGFI_ATTR_SPECIFIED = 0x000020000, // get only specified attributesSHGFI_LARGEICON = 0x000000000, // get large iconSHGFI_SMALLICON = 0x000000001, // get small iconSHGFI_OPENICON = 0x000000002, // get open iconSHGFI_SHELLICONSIZE = 0x000000004, // get shell size iconSHGFI_PIDL = 0x000000008, // pszPath is a pidlSHGFI_USEFILEATTRIBUTES = 0x000000010, // use passed dwFileAttributeSHGFI_ADDOVERLAYS = 0x000000020, // apply the appropriate overlaysSHGFI_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>/// 獲取文件類型的關(guān)聯(lián)圖標(biāo)/// </summary>/// <param name="fileName">文件類型的擴(kuò)展名或文件的絕對路徑</param>/// <param name="isLargeIcon">是否返回大圖標(biāo)</param>/// <returns>獲取到的圖標(biāo)</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);elsehI = 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> /// 獲取文件夾圖標(biāo)/// </summary> /// <returns>圖標(biāo)</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;}}}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 恩施市| 溧阳市| 得荣县| 兴安盟| 满城县| 南乐县| 蕲春县| 郯城县| 海盐县| 石家庄市| 福鼎市| 杭州市| 中江县| 公主岭市| 西贡区| 眉山市| 盱眙县| 崇礼县| 灵璧县| 格尔木市| 弋阳县| 揭阳市| 二手房| 海淀区| 绿春县| 大厂| 措美县| 南华县| 泗洪县| 云南省| 郎溪县| 册亨县| 汕头市| 广丰县| 双桥区| 皮山县| 丰县| 板桥市| 新绛县| 平罗县| 偃师市|