Comment utiliser les images contenues dans shell32.dll dans mon projet C #?

Comment utiliser les images contenues dans shell32.dll dans mon projet C #?

Vous pouvez extraire des icons d’une DLL avec ce code:

public class IconExtractor { public static Icon Extract(ssortingng file, int number, bool largeIcon) { IntPtr large; IntPtr small; ExtractIconEx(file, number, out large, out small, 1); try { return Icon.FromHandle(largeIcon ? large : small); } catch { return null; } } [DllImport("Shell32.dll", EntryPoint = "ExtractIconExW", CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] private static extern int ExtractIconEx(ssortingng sFile, int iIndex, out IntPtr piLargeVersion, out IntPtr piSmallVersion, int amountIcons); } ... form.Icon = IconExtractor.Extract("shell32.dll", 42, true); 

Bien sûr, vous devez connaître l’index de l’image dans la DLL …

Ce fil de discussion sur les forums de développeurs MSDN offre une solution:

La méthode typique pour les implémenter dans .NET consiste à utiliser les graphiques fournis dans le fichier ZIP situé dans C: \ Programmes \ Microsoft Visual Studio X \ Common7 \ VS200XImageLibrary.

Vous n’indiquez pas quelle version de Visual Studio vous avez installée, mais vous devrez remplacer le “200X” par votre numéro de version.

Certains d’entre eux sont disponibles dans %Program Files%\Microsoft Visual Studio 10.0\Common7\VS2010ImageLibrary – pour d’autres, vous devez %Program Files%\Microsoft Visual Studio 10.0\Common7\VS2010ImageLibrary les avocats de Microsoft pour obtenir une licence leur permettant de les redissortingbuer dans votre application.

Voir ce code. Ce sera une aide

 public class ExtractIcon { [DllImport("Shell32.dll")] private static extern int SHGetFileInfo( ssortingng pszPath, uint dwFileAtsortingbutes, out SHFILEINFO psfi, uint cbfileInfo, SHGFI uFlags); private struct SHFILEINFO { public SHFILEINFO(bool b) { hIcon = IntPtr.Zero; iIcon = 0; dwAtsortingbutes = 0; szDisplayName = ""; szTypeName = ""; } public IntPtr hIcon; public int iIcon; public uint dwAtsortingbutes; public ssortingng szDisplayName; public ssortingng szTypeName; }; private enum SHGFI { SmallIcon = 0x00000001, OpenIcon = 0x00000002, LargeIcon = 0x00000000, Icon = 0x00000100, DisplayName = 0x00000200, Typename = 0x00000400, SysIconIndex = 0x00004000, LinkOverlay = 0x00008000, UseFileAtsortingbutes = 0x00000010 } public static Icon GetIcon(ssortingng strPath, bool bSmall, bool bOpen) { SHFILEINFO info = new SHFILEINFO(true); int cbFileInfo = Marshal.SizeOf(info); SHGFI flags; if (bSmall) flags = SHGFI.Icon | SHGFI.SmallIcon; else flags = SHGFI.Icon | SHGFI.LargeIcon; if (bOpen) flags = flags | SHGFI.OpenIcon; SHGetFileInfo(strPath, 0, out info, (uint)cbFileInfo, flags); return Icon.FromHandle(info.hIcon); } }