Lấy Icon của file, thư mục bằng C#

Đăng bởi : 10/22/2013


Hướng dẫn lấy Icon của file, thư mục xuất ra listview
Demo: https://www.dropbox.com/s/s3q3lrrfhdygvci/LayIconFile-thuvienwinform.rar

Bước 1: Tạo 1 project
Bước 2: Tạo 1 Class với code sau: (chú ý thay tên project của bạn vào nhé)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;//
namespace tên_project_của_bạn
{
    [StructLayout(LayoutKind.Sequential)]
    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;
    };
    class SpyIcon
    {
        public const uint SHGFI_ICON = 0x100;
        public const uint SHGFI_LARGEICON = 0x0;    // 'Large icon
        public const uint SHGFI_SMALLICON = 0x1;    // 'Small icon

        [DllImport("shell32.dll")]
        public static extern IntPtr SHGetFileInfo(string pszPath,
                                    uint dwFileAttributes,
                                    ref SHFILEINFO psfi,
                                    uint cbSizeFileInfo,
                                    uint uFlags);
        public static System.Drawing.Icon GetIcon(string path)
        {
            SHFILEINFO sinfo = new SHFILEINFO();
            IntPtr iconHwnd = SHGetFileInfo(path, 0, ref sinfo, (uint)Marshal.SizeOf(sinfo), SHGFI_ICON | SHGFI_LARGEICON | SHGFI_SMALLICON);
            return System.Drawing.Icon.FromHandle(sinfo.hIcon);
        }
    }
}

Bước 3: Form chính như sau: (chú ý cài đặt trong các khung đỏ)




Bước 4: Code cho Form chính:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace LayIconFile
{
    public partial class Form1 : Form
    {
        int k = 0;
        public Form1()
        {
            InitializeComponent();
        }

        private void listView1_DragOver(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Copy;//hiệu ứng con chuột
        }

        private void listView1_DragDrop(object sender, DragEventArgs e)
        {
            string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false);//Lấy những đường dẫn file được kéo vào
            string fi;
            foreach (string filename in files)
            {
                imageList1.Images.Add(k.ToString(), SpyIcon.GetIcon(filename)); //Thêm icon cho imagelist
                fi = filename.Substring(Directory.GetParent(filename).ToString().Length + 1);//Lấy tên file
                //imageList1.Images.Add(i.ToString(), Image.FromFile(files[i])); //Cách 2
                ListViewItem item = new ListViewItem(fi, k);//Tạo item mới
                item.Tag = filename;//Đánh dấu đường dẫn file cho item
                listView1.Items.Add(item);//Thêm item vào listview
                k++;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Icon ic = SpyIcon.GetIcon(@"D:\isic.jpg");
            Bitmap bit = ic.ToBitmap();
            bit.Save(@"C:\icon.ico", System.Drawing.Imaging.ImageFormat.Icon);
        }

        private void listView1_DoubleClick(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start(listView1.SelectedItems[0].Tag.ToString());
            textBox1.Text = listView1.SelectedItems[0].Tag.ToString();
        }
    }
}

Bước 5: ấn F5 rồi kéo thả vào xem sao


{ 1 comments }

  1. Anonymous1/12/2014

    cai nay de lam chuong trinh quan li file duoc

    ReplyDelete

Nhận ngay 100$ cho VPS

Mua hàng ủng hộ page

Ủng hộ page

Nhãn

Code (45) Team Foundation Server (17) Database (14) News (14) product (13) toolbox (10) Linq (9) SoftDesign (8) XNA (6) API (5) Project (5) item (4)

- Bản quyền thuộc về Thư Viện WinForm - Giao diện: Metrominimalist - Thiết kế: Johanes Djogan -