GetLogicalDrives()可以实现。具体代码:
[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);
}
}