使用 SHGetImageList:如何使用 HImageList?
Using SHGetImageList : how to use HImageList?
我最近需要获取任何文件类型的图标,而且我想要一个大的,所以我使用SHImageList,如。
我很难让任何东西工作。我使用的是 SHGetFileInfo,但只有 returns 32x32px 图标,我更喜欢 256x256 的图标。
基于the reference I can figure out the first two arguments, but I have yet to figure out what the third argument is. Am I just supposed to put None
? Though based on this blog post,第三个参数是HImageList
,但我还没有找到任何HImageList
的结构。我的代码的相关片段是:
SHIL_JUMBO = 0x000000004
iidImageList=GUID("{46EB5926-582E-4017-9FDF-E8998DAA0950}")
hico=??
hres=ctypes.windll.shell32.SHGetImageList(SHIL_JUMBO,byref(iidImageList),hico)
hdc.DrawIcon( (0,0), hico )
hbmp.SaveBitmapFile( hdc, tempDirectory + "\Icontemp.bmp")
hico应该怎么初始化,什么类型的??
此外,为了避免 XY 问题,这个问题的答案可以提供另一种获取任何文件类型图标的方法。 (最好使用 Pillow 或 PyQt)
编辑:好吧,我想我不清楚我需要什么。我需要启动一个 HImageList 类型。我改变了标题,以反映编辑。另外,对于 XY 问题。一个要求是程序在Python(除非可以证明那是不可能的)。
SHGetImageList
returns 图像列表,不是图标。
需要配合SHGetFileInfo
使用:
SHGetFileInfo
为您提供系统图像列表中的图标索引(使用 SHGFI_SYSICONINDEX
标志)
SHGetImageList
为您提供巨型图像列表(使用 SHIL_JUMBO
)。
然后您可以使用 ImageList_DrawEx
, or extract it from the icon list as an HICON
using the ImageList_ExtractIcon
macro or by calling ImageList_GetIcon
. Note that although SHGetImageList
returns an IImageList
interface 绘制图标,指向这些的指针可以自由转换为 HIMAGELIST
。
伪代码:
SHFILEINFO sfi;
SHGetFileInfo(L"c:\file.txt", 0, &sfi, sizeof(sfi),
SHGFI_SYSICONINDEX);
HIMAGELIST hil;
SHGetImageList(SHIL_JUMBO, IID_IImageList, &hil);
ImageList_DrawEx(hil, sfi.iIcon, hdc, x, y, 0, 0,
CLR_NONE, CLR_NONE, ILD_NORMAL);
我最近需要获取任何文件类型的图标,而且我想要一个大的,所以我使用SHImageList,如
我很难让任何东西工作。我使用的是 SHGetFileInfo,但只有 returns 32x32px 图标,我更喜欢 256x256 的图标。
基于the reference I can figure out the first two arguments, but I have yet to figure out what the third argument is. Am I just supposed to put None
? Though based on this blog post,第三个参数是HImageList
,但我还没有找到任何HImageList
的结构。我的代码的相关片段是:
SHIL_JUMBO = 0x000000004
iidImageList=GUID("{46EB5926-582E-4017-9FDF-E8998DAA0950}")
hico=??
hres=ctypes.windll.shell32.SHGetImageList(SHIL_JUMBO,byref(iidImageList),hico)
hdc.DrawIcon( (0,0), hico )
hbmp.SaveBitmapFile( hdc, tempDirectory + "\Icontemp.bmp")
hico应该怎么初始化,什么类型的??
此外,为了避免 XY 问题,这个问题的答案可以提供另一种获取任何文件类型图标的方法。 (最好使用 Pillow 或 PyQt)
编辑:好吧,我想我不清楚我需要什么。我需要启动一个 HImageList 类型。我改变了标题,以反映编辑。另外,对于 XY 问题。一个要求是程序在Python(除非可以证明那是不可能的)。
SHGetImageList
returns 图像列表,不是图标。
需要配合SHGetFileInfo
使用:
SHGetFileInfo
为您提供系统图像列表中的图标索引(使用SHGFI_SYSICONINDEX
标志)SHGetImageList
为您提供巨型图像列表(使用SHIL_JUMBO
)。
然后您可以使用 ImageList_DrawEx
, or extract it from the icon list as an HICON
using the ImageList_ExtractIcon
macro or by calling ImageList_GetIcon
. Note that although SHGetImageList
returns an IImageList
interface 绘制图标,指向这些的指针可以自由转换为 HIMAGELIST
。
伪代码:
SHFILEINFO sfi;
SHGetFileInfo(L"c:\file.txt", 0, &sfi, sizeof(sfi),
SHGFI_SYSICONINDEX);
HIMAGELIST hil;
SHGetImageList(SHIL_JUMBO, IID_IImageList, &hil);
ImageList_DrawEx(hil, sfi.iIcon, hdc, x, y, 0, 0,
CLR_NONE, CLR_NONE, ILD_NORMAL);