C# 獲取文件的圖標

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    public struct SHFILEINFO
    {
        public IntPtr hIcon;
        public IntPtr iIcon;
        public uint dwAttributes;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
        public string szDisplayName;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
        public string szTypeName;
    }

 

/// 這個是獲取文件的圖標

 public const uint SHGFI_ICON = 0x100;
        public const uint SHGFI_LARGEICON = 0x0;
        public const uint SHGFI_SMALLICON = 0x1;

        [DllImport("shell32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr SHGetFileInfo(
            string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbFileInfo, uint uFlags);

///釋放句柄

        [DllImport("user32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool DestroyIcon(IntPtr hIcon);

 

 

///Test 方法

 

private void button1_Click(object sender, EventArgs e) {
            SHFILEINFO fileInfo = new SHFILEINFO();
            ShellApi.SHGetFileInfo(@"D:/CETV/CETVProject/CetvTools/wait.gif", 0, ref fileInfo, (uint)Marshal.SizeOf(fileInfo), ShellApi.SHGFI_ICON | ShellApi.SHGFI_SMALLICON);

            Icon ico = Icon.FromHandle(fileInfo.hIcon);
            Bitmap bmp = new Bitmap(ico.Width, ico.Height);
            Graphics g = Graphics.FromImage(bmp);
            g.DrawIcon(ico, 0, 0);

            this.pictureBox1.Image = bmp;
        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章