实现:
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential)]
public struct SHFILEINFO
{
public IntPtr hIcon;
public int iIcon;
public int dwAttributes;
public string szDisplayName;
public string szTypeName;
}
[DllImport("shell32")]
private static extern int SHGetFileInfo(string pszPath,int dwFileAttributes,ref SHFILEINFO psfi,int cbFileInfo,int uFlags);
const int SHGFI_ICON = 0x0100;
const int SHGFI_LARGEICON = 0x0000;
static string[] drives;
ImageList img=new ImageList();
获得列表:
private void Form1_Load(object sender, System.EventArgs e)
{
this.listView1.LargeImageList=img;
this.listView1.SmallImageList=img;
this.listView1.StateImageList=img;
drives=Environment.GetLogicalDrives(); for(int i=0;i<drives.Length;i++) //枚举驱动器
{ string str_temp=drives[i];
this.listView1.Items.Add(str_temp);
this.listView1.Items[i].ImageIndex=i; }
//获得相应的图标
for(int i=0;i<drives.Length;i++)
{
SHFILEINFO FileInfo=new SHFILEINFO();
SHGetFileInfo(drives[i],0,ref FileInfo,Marshal.SizeOf(FileInfo),SHGFI_ICON | SHGFI_LARGEICON);
Icon myIcon;
myIcon=Icon.FromHandle(FileInfo.hIcon);
img.Images.Add(myIcon); }
}