Getting icons of Drives and Directories: Icon.ExtractAssociatedIcon(filePath) doesn't work?

Spectraljump picture Spectraljump · Apr 2, 2011 · Viewed 11.6k times · Source

If Icon.ExtractAssociatedIcon(filePath) is the only way to get icons in .NET && if it doesn't work for Drives and Directories (does it?) then how do you go about getting the icons for them?

In other words, I'd like to

foreach (string driveName in Directory.GetLogicalDrives())
//if (System.IO.Directory.Exists(driveName))
{
    using (System.Drawing.Icon systemIcon = System.Drawing.Icon.ExtractAssociatedIcon(driveName))
    { ... }
}

^ this obviously doesn't work (works only for files)

I'm not sure System.IO.Directory.Exists(file) is the right way for detecting if drives exist as well...

Answer

HABJAN picture HABJAN · Apr 2, 2011

To do this from a .NET application, you will have to P/Invoke the SHGetFileInfo function from the Windows API (it's defined in shell32.dll).

Here is some sample code that shows how to do this: Getting Associated Icons Using C#