使用SHGetImageList:如何使用HImageList?

2024-07-04 09:01:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近需要获得任何文件类型的图标,我想要一个大的,所以我使用的是SHImageList,作为this C# answer suggested。在

我做任何事都有困难。我使用的是SHGetFileInfo,但它只返回32x32px图标,我更喜欢256x256个图标。在

基于the reference我可以计算出前两个参数,但是我还没有弄清楚第三个参数是什么。我是不是应该把None?虽然基于this blog post的第三个参数是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问题,这个问题的答案可以提供一种获取任何文件类型图标的替代方法。(最好使用枕头或PyQt)

编辑:嗯,我想我不清楚我需要什么。我需要启动一个HImageList类型。我改了标题,以反映编辑。还有,XY问题。一个要求是程序是用Python编写的(除非可以证明这是不可能的)。在


Tags: answer编辑类型参数this图标文件类型xy
1条回答
网友
1楼 · 发布于 2024-07-04 09:01:56

^{}返回图像列表,而不是图标。在

您需要将其与^{}结合使用:

  • SHGetFileInfo提供系统映像列表中的图标索引(使用SHGFI_SYSICONINDEX标志)
  • SHGetImageList提供了jumbo图像列表(使用SHIL_JUMBO)。在

然后可以使用^{}绘制图标,或者使用^{}宏或调用^{}从图标列表中将其提取为HICON。注意,尽管SHGetImageList返回一个^{} interface,指向这些的指针可以自由转换为HIMAGELIST。在

Psuedo代码:

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);

相关问题 更多 >

    热门问题