Đăng bởi : Anonymous
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


cai nay de lam chuong trinh quan li file duoc
ReplyDelete