如何使用Windows shell获取文件扩展名的大图标?
我找到了关于获取文件甚至文件扩展名的系统映像的各种文章。 我有以下方法,用于获取小型16×16和大型32×32图像。
// DLL Import [DllImport("shell32")] private static extern IntPtr SHGetFileInfo( string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbFileInfo, uint uFlags); // Constants/Enums private const int FILE_ATTRIBUTE_NORMAL = 0x80; private enum SHGetFileInfoConstants : int { SHGFI_ICON = 0x100, // get icon SHGFI_DISPLAYNAME = 0x200, // get display name SHGFI_TYPENAME = 0x400, // get type name SHGFI_ATTRIBUTES = 0x800, // get attributes SHGFI_ICONLOCATION = 0x1000, // get icon location SHGFI_EXETYPE = 0x2000, // return exe type SHGFI_SYSICONINDEX = 0x4000, // get system icon index SHGFI_LINKOVERLAY = 0x8000, // put a link overlay on icon SHGFI_SELECTED = 0x10000, // show icon in selected state SHGFI_ATTR_SPECIFIED = 0x20000, // get only specified attributes SHGFI_LARGEICON = 0x0, // get large icon SHGFI_SMALLICON = 0x1, // get small icon SHGFI_OPENICON = 0x2, // get open icon SHGFI_SHELLICONSIZE = 0x4, // get shell size icon SHGFI_PIDL = 0x8, // pszPath is a pidl SHGFI_USEFILEATTRIBUTES = 0x10, // use passed dwFileAttribute SHGFI_ADDOVERLAYS = 0x000000020, // apply the appropriate overlays SHGFI_OVERLAYINDEX = 0x000000040 // Get the index of the overlay } public static Icon GetSmallIconForExtension(string extension) { // Get the small icon and clone it, as we MUST destroy the handle when we are done. SHFILEINFO shinfo = new SHFILEINFO(); IntPtr ptr = SHGetFileInfo( extension, FILE_ATTRIBUTE_NORMAL, ref shinfo, (uint)Marshal.SizeOf(shinfo), (int)(SHGetFileInfoConstants.SHGFI_ICON | SHGetFileInfoConstants.SHGFI_SMALLICON | SHGetFileInfoConstants.SHGFI_USEFILEATTRIBUTES | SHGetFileInfoConstants.SHGFI_TYPENAME)); Icon icon = Icon.FromHandle(shinfo.hIcon).Clone() as Icon; DestroyIcon(shinfo.hIcon); return icon; } public static Icon GetLargeIconForExtension(string extension) { // Get the small icon and clone it, as we MUST destroy the handle when we are done. SHFILEINFO shinfo = new SHFILEINFO(); IntPtr ptr = SHGetFileInfo( extension, FILE_ATTRIBUTE_NORMAL, ref shinfo, (uint)Marshal.SizeOf(shinfo), (int)( SHGetFileInfoConstants.SHGFI_ICON | SHGetFileInfoConstants.SHGFI_LARGEICON | SHGetFileInfoConstants.SHGFI_USEFILEATTRIBUTES | SHGetFileInfoConstants.SHGFI_TYPENAME )); Icon icon = Icon.FromHandle(shinfo.hIcon).Clone() as Icon; DestroyIcon(shinfo.hIcon); return icon; }
从上述方法之一获取图标后,我将其转换为位图,如下所示:
Image image = icon.ToBitmap();
在上面指定SHGetFileInfoConstants.SHGFI_LARGEICON
时,我得到32×32大小的位图图像。 但是,在Windows资源管理器中,当您选择查看Medium Icons
图标时,您将获得48×48大小的图标。
我想要48×48大小的图标(不是32×32)。 我需要做什么?
shell图标的大小在SHGetImageList
的文档中SHGetImageList
:
所以当你要求“大”图标时,你会得到32×32。 如果你想要超大图标,你需要从SHIL_EXTRALARGE
图像列表中获取它们。
上述就是C#学习教程:如何使用Windows shell获取文件扩展名的大图标?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1004228.html