語法:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Toolstoy
{
public partial class Form1 : Form
{
[StructLayout(LayoutKind.Sequential)]
public struct SHFILEINFO
{
public IntPtr hIcon;
public int iIcon;
public uint dwAttributes;
public string szDisplayName;
public string szTypeName;
};
const uint SHGFI_ICON = 0x00000100;
const uint SHGFI_LARGEICON = 0x00000000;
const uint SHGFI_SMALLICON = 0x00000001;
const uint SHGFI_SYSICONINDEX = 0x4000;
[DllImport("shell32.dll")]
public static extern IntPtr SHGetFileInfo(string filename, uint fileattributes, ref SHFILEINFO shfi, uint cbfi, uint flag);
[DllImport("user32.dll")]
public static extern bool DestroyIcon(IntPtr hIcon);
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
listView1.Items.Clear();
listView1.Columns.Add("名稱", 300, HorizontalAlignment.Left);
listView1.Columns.Add("大小", 100, HorizontalAlignment.Right);
listView1.View = View.Details;
//DirectoryInfo selDir = new DirectoryInfo(Environment.CurrentDirectory);
DirectoryInfo selDir = new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
//this.Text=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
DirectoryInfo[] listDir;
FileInfo[] listFile;
try { }
catch { }
listDir = selDir.GetDirectories();
listFile = selDir.GetFiles();
foreach (DirectoryInfo d in listDir)
{
SHFILEINFO shfi = new SHFILEINFO();
SHGetFileInfo(d.FullName, 0, ref shfi, (uint)Marshal.SizeOf(shfi), SHGFI_ICON | SHGFI_SMALLICON);
Icon myicon = (Icon)Icon.FromHandle(shfi.hIcon).Clone();
DestroyIcon(shfi.hIcon);
imageList1.Images.Add("dir", myicon);
ListViewItem lv = new ListViewItem(d.Name);
lv.ImageKey = "dir";
listView1.Items.Add(lv);
}
foreach (FileInfo d in listFile)
{
SHFILEINFO shfi = new SHFILEINFO();
SHGetFileInfo(d.FullName, 0, ref shfi, (uint)Marshal.SizeOf(shfi), SHGFI_ICON | SHGFI_SMALLICON);
Icon myicon = (Icon)Icon.FromHandle(shfi.hIcon).Clone();
DestroyIcon(shfi.hIcon);
imageList1.Images.Add(d.Extension, myicon);
ListViewItem lv = new ListViewItem(d.Name);
string num = d.Length.ToString();
lv.ImageKey = d.Extension;
lv.SubItems.Add(num);
listView1.Items.Add(lv);
}
}
}
}
分享這幾天研究的經驗
