我正在使用pywin32进行Windows Shell扩展,并通过QueryContextMenu
添加了右键单击上下文菜单项。我正在尝试从imageres.dll
插入系统图标。我实质上是尝试使用ExtractIconEx
和GetIconInfo
来做到这一点:
def QueryContextMenu(self, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags):
# ... Some other code ...
item_text = 'New context menu entry'
large, small = win32gui.ExtractIconEx(r'C:\Windows\System32\imageres.dll', 202)
bitmap = win32gui.GetIconInfo(small[0])[4]
item, extras = win32gui_struct.PackMENUITEMINFO(text=item_text,
hbmpItem=bitmap,
wID=idCmdFirst)
win32gui.InsertMenuItem(hMenu, indexMenu+1, 1, item)
return 1
此代码不会引发任何错误,但是不会显示图标,并且最终也不会调用该命令。感谢您的协助。
答案 0 :(得分:0)
如果您只关心图标,那么您只需创建一个普通的静态注册表菜单项并在注册表中设置Icon值即可。这将在Windows 7及更高版本上运行,并且无需创建shell扩展。在旧版本中,如果要使用图标,则必须创建外壳扩展名。
在Vista上,您可以convert the icon to a 32-bit ARGB bitmap并将其设置为菜单项位图。
在XP及更低版本的XP上,您应该使用HBMMENU_CALLBACK或自定义绘图。
仅使用普通位图会出现透明度问题。 Windows 95和NT4?不支持普通的位图方法,并且使用选中/未选中的位图会同时导致大小和透明度问题。