当前位置:  开发笔记 > 编程语言 > 正文

如何使用PyWin32从exe文件加载嵌入图标?

如何解决《如何使用PyWin32从exe文件加载嵌入图标?》经验,为你挑选了1个好方法。

我有一个用py2exe生成的exe文件.在setup.py中,我指定了一个嵌入在exe中的图标:

windows=[{'script': 'my_script.py','icon_resources': [(0, 'my_icon.ico')], ...

我尝试使用以下方式加载图标:

hinst = win32api.GetModuleHandle(None)
hicon = win32gui.LoadImage(hinst, 0, win32con.IMAGE_ICON, 0, 0, win32con.LR_DEFAULTSIZE)

但这会产生(非常非特定的)错误:
pywintypes.error:(0,'LoadImage','没有错误消息可用')

如果我尝试将0指定为字符串

hicon = win32gui.LoadImage(hinst, '0', win32con.IMAGE_ICON, 0, 0, win32con.LR_DEFAULTSIZE)

然后我得到错误:
pywintypes.error:(1813,'LoadImage','在图像文件中找不到指定的资源类型.')

那么,加载图标的正确方法/语法是什么?
另请注意,我不使用任何GUI工具包 - 只是通过PyWin32的Windows API.



1> Andreas Thom..:

@efotinis:你是对的.

这是一个解决方法,直到py2exe得到修复,你不想两次包含相同的图标:

hicon = win32gui.CreateIconFromResource(win32api.LoadResource(None, win32con.RT_ICON, 1), True)

请注意,1不是您在setup.py中提供图标的ID(图标组ID),而是由py2exe 自动分配给每个图标组中每个图标的资源ID .至少这是我理解它的方式.

如果要创建具有指定大小的图标(因为CreateIconFromResource使用系统默认图标大小),则需要使用CreateIconFromResourceEx,这不是通过PyWin32提供的:

icon_res = win32api.LoadResource(None, win32con.RT_ICON, 1)
hicon = ctypes.windll.user32.CreateIconFromResourceEx(icon_res, len(icon_res), True,
    0x00030000, 16, 16, win32con.LR_DEFAULTCOLOR)

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有