使用shell扩展将图标插入上下文菜单

时间:2019-05-19 19:55:16

标签: python windows shell winapi pywin32

我正在使用pywin32进行Windows Shell扩展,并通过QueryContextMenu添加了右键单击上下文菜单项。我正在尝试从imageres.dll插入系统图标。我实质上是尝试使用ExtractIconExGetIconInfo来做到这一点:

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

此代码不会引发任何错误,但是不会显示图标,并且最终也不会调用该命令。感谢您的协助。

1 个答案:

答案 0 :(得分:0)

如果您只关心图标,那么您只需创建一个普通的静态注册表菜单项并在注册表中设置Icon值即可。这将在Windows 7及更高版本上运行,并且无需创建shell扩展。在旧版本中,如果要使用图标,则必须创建外壳扩展名。

在Vista上,您可以convert the icon to a 32-bit ARGB bitmap并将其设置为菜单项位图。

在XP及更低版本的XP上,您应该使用HBMMENU_CALLBACK或自定义绘图。

仅使用普通位图会出现透明度问题。 Windows 95和NT4?不支持普通的位图方法,并且使用选中/未选中的位图会同时导致大小和透明度问题。