如何在我的C#项目中使用shell32.dll中的图像?

如何在我的C#项目中使用shell32.dll中的图像?

您可以使用以下代码从DLL中提取图标:

public class IconExtractor { public static Icon Extract(string 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(string sFile, int iIndex, out IntPtr piLargeVersion, out IntPtr piSmallVersion, int amountIcons); } ... form.Icon = IconExtractor.Extract("shell32.dll", 42, true); 

当然你需要知道DLL中图像的索引…

MSDN开发人员论坛上的这个主题提供了一个解决方案:

在.NET中实现这些的典型方法是使用位于C:\ Program Files \ Microsoft Visual Studio X \ Common7 \ VS200XImageLibrary的ZIP文件中提供的图形。

您没有说明已安装的Visual Studio版本,但您需要将“200X”替换为您的版本号。

其中一些可用于%Program Files%\Microsoft Visual Studio 10.0\Common7\VS2010ImageLibrary – 对于其他人,您需要与Microsoft的律师讨论如何在您的应用程序中为其重新分发授权

看到这段代码。 这将有所帮助

 public class ExtractIcon { [DllImport("Shell32.dll")] private static extern int SHGetFileInfo( string pszPath, uint dwFileAttributes, out SHFILEINFO psfi, uint cbfileInfo, SHGFI uFlags); private struct SHFILEINFO { public SHFILEINFO(bool b) { hIcon = IntPtr.Zero; iIcon = 0; dwAttributes = 0; szDisplayName = ""; szTypeName = ""; } public IntPtr hIcon; public int iIcon; public uint dwAttributes; public string szDisplayName; public string szTypeName; }; private enum SHGFI { SmallIcon = 0x00000001, OpenIcon = 0x00000002, LargeIcon = 0x00000000, Icon = 0x00000100, DisplayName = 0x00000200, Typename = 0x00000400, SysIconIndex = 0x00004000, LinkOverlay = 0x00008000, UseFileAttributes = 0x00000010 } public static Icon GetIcon(string 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); } }