devilhand 发表于 2013-2-7 04:45:07

获取文件的图标

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;namespace 获取文件的图标{    public partial class Form1 : Form    {            struct SHFILEINFO      {            public IntPtr hIcon;            public int iIcon;            public uint dwAttributes;                        public string szDisplayName;                        public string szTypeName;      }      public Form1()      {            InitializeComponent();      }      private void button1_Click(object sender, EventArgs e)      {            using (Graphics g = this.pictureBox1.CreateGraphics())            {                g.Clear(this.pictureBox1.BackColor); //清除picturebox的背景色,为了画透明图标                g.DrawIcon(GetIcon(this.textBox1.Text, false), 1, 1); //绘制小图标            }            using (Graphics g = this.pictureBox2.CreateGraphics())            {                g.Clear(this.pictureBox2.BackColor); //清除picturebox的背景色,为了画透明图标                g.DrawIcon(GetIcon(textBox1.Text, true), 1, 1); //绘制小图标            }      }      ///         /// 获取文件类型的关联图标      ///         /// 文件类型的扩展名或文件的绝对路径      /// 是否返回大图标      /// 获取到的图标      static Icon GetIcon(string fileName, bool isLargeIcon)      {            SHFILEINFO shfi = new SHFILEINFO();            IntPtr hI;            if (isLargeIcon)                hI = NativeMethods.SHGetFileInfo(fileName, 0, ref shfi, (uint)Marshal.SizeOf(shfi), NativeMethods.SHGFI_ICON | NativeMethods.SHGFI_USEFILEATTRIBUTES | NativeMethods.SHGFI_LARGEICON);            else                hI = NativeMethods.SHGetFileInfo(fileName, 0, ref shfi, (uint)Marshal.SizeOf(shfi), NativeMethods.SHGFI_ICON | NativeMethods.SHGFI_USEFILEATTRIBUTES | NativeMethods.SHGFI_SMALLICON);            Icon icon = Icon.FromHandle(shfi.hIcon).Clone() as Icon;            NativeMethods.DestroyIcon(shfi.hIcon); //释放资源            return icon;      }      private void button2_Click(object sender, EventArgs e)      {            if (openFileDialog1 .ShowDialog ()==DialogResult .OK )            {                textBox1.Text = openFileDialog1.FileName;            }      }      class NativeMethods      {                        public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbFileInfo, uint uFlags);                        public static extern int DestroyIcon(IntPtr hIcon);            #region API 参数的常量定义            public const uint SHGFI_ICON = 0x100;            public const uint SHGFI_LARGEICON = 0x0; //大图标 32×32            public const uint SHGFI_SMALLICON = 0x1; //小图标 16×16            public const uint SHGFI_USEFILEATTRIBUTES = 0x10;            #endregion      }    }} 
页: [1]
查看完整版本: 获取文件的图标