[C#]
[DllImport("shell32.dll")]
static extern IntPtr ExtractAssociatedIcon(IntPtr hInst, StringBuilder lpIconPath,
out ushort lpiIcon);
или
[DllImport("shell32.dll")]
static extern IntPtr ExtractIcon(IntPtr hInst, string lpszExeFileName, int nIconIndex);
Пример
// Отобразим значок какого-нибудь файла
// Добавим в проект элемент OpenFileDialog, кнопку и PictureBox
openFileDialog1.ShowDialog();
ushort uicon;
StringBuilder strB = new StringBuilder(openFileDialog1.FileName);
IntPtr handle = ExtractAssociatedIcon(this.Handle, strB, out uicon);
Icon ico = Icon.FromHandle(handle);
pictureBox1.Image = ico.ToBitmap();
Запустите проект и выберите любой файл на диске. На форме в PictureBox отобразится значок, который используется для выбранного файла (как это мы видим в Проводники).
Описание функции и ее параметров добавлено в справочник по функциям Windows API для .NET Framework.
К слову сказать, совсем не обязательно использовать неуправлямый код. В .NET Framework есть метод Icon.ExtractAssociatedIcon пространства имен System.Drawing, который делает ту же работу.
Добавьте в проект еще одну кнопку и напишите следующий код:
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
Icon icon = Icon.ExtractAssociatedIcon(openFileDialog1.FileName);
this.Icon = icon;
pictureBox1.Image = icon.ToBitmap();
}
Удачного вам программирования!
1 комментарий:
Таким методом выводится только значок размером 32х32 (BMP сжатие)!
Для более крупных значков 256х256 (PNG сжатие), если брать Windows 7, метод не подходит!!!
Существует готовый проект: http://www.codeproject.com/KB/cs/IconLib/IconLib_src.zip
Но там при конвертировании из Ico в Bmp, прозрачность становится черной!
Как этого избежать, и сделать белым цветом?
Отправить комментарий