Найдена информация здесь . Чтобы получить большой значок Vista, вам нужно использовать метод Shell32 SHGetFileInfo. Я скопировал соответствующий текст ниже, конечно, вы захотите заменить переменную имени файла на «Assembly.GetExecutingAssembly (). Location».
using System.Runtime.InteropServices;
Набор констант, которые мы будем использовать при вызове SHGetFileInfo (), чтобы указать размер иконки, которую мы хотим получить:
// Constants that we need in the function call
private const int SHGFI_ICON = 0x100;
private const int SHGFI_SMALLICON = 0x1;
private const int SHGFI_LARGEICON = 0x0;
Структура SHFILEINFO очень важна, так как она будет нашей ручкой для различной информации о файлах, среди которых графическая иконка.
// This structure will contain information about the file
public struct SHFILEINFO
{
// Handle to the icon representing the file
public IntPtr hIcon;
// Index of the icon within the image list
public int iIcon;
// Various attributes of the file
public uint dwAttributes;
// Path to the file
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string szDisplayName;
// File type
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
public string szTypeName;
};
Окончательная подготовка к неуправляемому коду - определить сигнатуру SHGetFileInfo, которая находится внутри популярного Shell32.dll:
// The signature of SHGetFileInfo (located in Shell32.dll)
[DllImport("Shell32.dll")]
public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, int cbFileInfo, uint uFlags);
Теперь, когда у нас все подготовлено, пришло время вызвать функцию и отобразить значок, который мы получили. Объект, который будет получен, имеет тип Icon (System.Drawing.Icon), но мы хотим отобразить его в PictureBox, поэтому мы преобразуем Icon в растровое изображение, используя метод ToBitmap ().
Но, прежде всего, есть 3 элемента управления, которые необходимо добавить в форму: кнопка btnExtract, которая имеет «Extract Icon» для своего свойства Text, picIconSmall, которая является PictureBox, и picIconLarge, который также является PictureBox. Это потому, что мы получим два размера иконок. Теперь дважды щелкните btnExtract в представлении «Дизайн» Visual Studio, и вы попадете на событие Click. Внутри остальная часть кода:
private void btnExtract_Click(object sender, EventArgs e)
{
// Will store a handle to the small icon
IntPtr hImgSmall;
// Will store a handle to the large icon
IntPtr hImgLarge;
SHFILEINFO shinfo = new SHFILEINFO();
// Open the file that we wish to extract the icon from
if(openFile.ShowDialog() == DialogResult.OK)
{
// Store the file name
string FileName = openFile.FileName;
// Sore the icon in this myIcon object
System.Drawing.Icon myIcon;
// Get a handle to the small icon
hImgSmall = SHGetFileInfo(FileName, 0, ref shinfo, Marshal.SizeOf(shinfo), SHGFI_ICON | SHGFI_SMALLICON);
// Get the small icon from the handle
myIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);
// Display the small icon
picIconSmall.Image = myIcon.ToBitmap();
// Get a handle to the large icon
hImgLarge = SHGetFileInfo(FileName, 0, ref shinfo, Marshal.SizeOf(shinfo), SHGFI_ICON | SHGFI_LARGEICON);
// Get the large icon from the handle
myIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);
// Display the large icon
picIconLarge.Image = myIcon.ToBitmap();
}
}
ОБНОВЛЕНИЕ: найдено больше информации здесь .