Если вам известно имя файла, значок которого вы хотите, вы можете использовать для этой цели функцию ExtractAssociatedIcon
. например,
Icon ico = Icon.ExtractAssociatedIcon(@"C:\WINDOWS\system32\notepad.exe");
Хотя этот метод имеет подвох. Согласно документации,
Когда ExtractAssociatedIcon используется с растровыми изображениями, миниатюрное изображение может быть возвращено вместо значка, если в системе, в которой выполняется приложение, есть параметр реестра, позволяющий отображать растровые файлы в виде миниатюрных изображений.
Еще одна вещь, которую я обнаружил, заключалась в том, что этот метод извлекает только значки размером 32x32 пикселя.
См. System.Drawing.Icon.ExtractAssociatedIcon (MSDN) для получения дополнительной информации о том, как использовать этот метод.
Для более надежного извлечения значков, я бы посоветовал вам взглянуть на проект OSIcon в CodeProject.
Это позволяет вам получить связанный значок любого файла, используя его имя или расширение .
Вот пример кода для этого:
OSIcon.WinAPI.Shell32.SHFILEINFO shfi = new Shell32.SHFILEINFO();
Icon icon = OSIcon.IconReader.GetFileIcon(".png", IconReader.IconSize.Large, false, ref shfi);
Это ссылка на проект: http://www.codeproject.com/KB/system/OSIcon.aspx