c# – 如何使用Windows shell获取文件扩展名的大图标?
发布时间:2020-12-16 00:02:42 所属栏目:百科 来源:网络整理
导读:我找到了关于获取文件甚至文件扩展名的系统映像的各种文章.我有以下方法,用于获取小型16×16和大型32×32图像. // DLL Import [DllImport("shell32")] private static extern IntPtr SHGetFileInfo( string pszPath,uint dwFileAttributes,ref SHFILEINFO ps
我找到了关于获取文件甚至文件扩展名的系统映像的各种文章.我有以下方法,用于获取小型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,(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资源管理器中,当您选择查看中等图标时,您将获得48×48大小的图标. 我想要48×48大小的图标(不是32×32).我需要做什么? 解决方法
shell图标的大小在
SHGetImageList 的文档中给出:
> 16×16 =小 所以当你要求“大”图标时,你会得到32×32.如果你想要超大图标,你需要从SHIL_EXTRALARGE图像列表中获取它们. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |