C#中如何獲取文件圖標(biāo)
本文給大家介紹如何去獲取一個(gè)文件的關(guān)聯(lián)圖標(biāo)呢?現(xiàn)總結(jié)如下:
首先明確問(wèn)題:獲取一個(gè)文件的關(guān)聯(lián)圖標(biāo)或者是某個(gè)類型文件的顯示圖標(biāo)。
在網(wǎng)上搜了一圈,發(fā)現(xiàn)方法還是比較多的,但是應(yīng)用C#進(jìn)行獲取的方法不多。我選擇一種用.Net庫(kù)的方法。
使用的類:
System.Drawing.Icon ,位于System.Drawing 命名空間。
具體方法:
System.Drawing.Icon 類中的靜態(tài)方法:public static Icon ExtractAssociatedIcon(string filePath)
此方法接收一個(gè)文件路徑,返回一個(gè) Icon 類型的對(duì)象。此對(duì)象既是指定文件的 Icon 圖標(biāo)對(duì)象。
此 Icon 類提供了 Save 方法,可以將 Icon 文件寫入流中,進(jìn)而保存至硬盤文件。
當(dāng)然要在程序中顯示也是可以的,Icon 類提供了 ToBitmap 方法,可以將 Icon 文件轉(zhuǎn)換為 Bitmap。Bitmap 就可以在 PictureBox 中顯示了。
如果要根據(jù)后綴名來(lái)獲取文件圖標(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 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> /// 獲取文件類型的關(guān)聯(lián)圖標(biāo) /// </summary> /// <param name="fileName">文件類型的擴(kuò)展名或文件的絕對(duì)路徑</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); 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> /// 獲取文件夾圖標(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; } } }
上一篇:C# DateTime.ToString根據(jù)不同語(yǔ)言生成相應(yīng)的時(shí)間格式
欄 目:C#教程
下一篇:在C#中如何使用正式表達(dá)式獲取匹配所需數(shù)據(jù)
本文標(biāo)題:C#中如何獲取文件圖標(biāo)
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6615.html
您可能感興趣的文章
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并打開的方法
- 01-10C#實(shí)現(xiàn)Winform中打開網(wǎng)頁(yè)頁(yè)面的方法
- 01-10C#實(shí)現(xiàn)由四周向中心縮小的窗體退出特效
- 01-10Extjs4如何處理后臺(tái)json數(shù)據(jù)中日期和時(shí)間
- 01-10C#獲取進(jìn)程或線程相關(guān)信息的方法
- 01-10C#調(diào)用dos窗口獲取相關(guān)信息的方法
- 01-10C#中DataGridView常用操作實(shí)例小結(jié)
- 01-10C#編程獲取資源文件中圖片的方法
- 01-10C#獲取任務(wù)欄顯示進(jìn)程的方法
- 01-10asp.net中XML如何做增刪改查操作


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁(yè)無(wú)法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻 器左下角滾動(dòng)新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過(guò)重寫Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10C#中split用法實(shí)例總結(jié)
- 04-02jquery與jsp,用jquery
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什