程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中若何獲得文件圖標

C#中若何獲得文件圖標

編輯:C#入門知識

C#中若何獲得文件圖標。本站提示廣大學習愛好者:(C#中若何獲得文件圖標)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中若何獲得文件圖標正文


 本文給年夜家引見若何去獲得一個文件的聯系關系圖標呢?現總結以下:

  起首明白成績:獲得一個文件的聯系關系圖標或許是某個類型文件的顯示圖標。

  在網上搜了一圈,發明辦法照樣比擬多的,然則運用C#停止獲得的辦法不多。我選擇一種用.Net庫的辦法。

 應用的類:

    System.Drawing.Icon ,位於System.Drawing 定名空間。

  詳細辦法:  

    System.Drawing.Icon 類中的靜態辦法:public static Icon ExtractAssociatedIcon(string filePath)

  此辦法吸收一個文件途徑,前往一個 Icon 類型的對象。此對象既是指定文件的 Icon 圖標對象。

  此 Icon 類供給了 Save 辦法,可以將 Icon 文件寫入流中,進而保留至硬盤文件。

  固然要在法式中顯示也是可以的,Icon 類供給了 ToBitmap 辦法,可以將 Icon 文件轉換為 Bitmap。Bitmap 便可以在 PictureBox 中顯示了。

  假如要依據後綴名來獲得文件圖標,那要怎樣辦呢?我想了一個比擬笨的方法。看代碼~

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

  如斯,新建一個指定後綴名的文件,獲得圖標後直接刪除,就可以取得指定文件後綴名的圖標了。嘻嘻~

上面給年夜家分享一段代碼引見C#獲得文件聯系關系圖標

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 參數的常量界說
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;
}
}
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved