Вставка иконки в контекстное меню с использованием расширения оболочки - PullRequest
0 голосов
/ 19 мая 2019

Я делаю расширение оболочки Windows, используя pywin32, и добавляю пункт контекстного меню, вызываемый правой кнопкой мыши, через 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

Этот код не выдает никаких ошибок, но значок не отображается, и команда в конечном итоге также не вызывается,Спасибо за любую помощь.

1 Ответ

0 голосов
/ 20 мая 2019

Если все, что вас волнует, это значок, то вы можете просто создать обычный пункт меню статического реестра и установить значение значка в реестре.Это будет работать в Windows 7 и более поздних версиях, и нет необходимости создавать расширение оболочки.В старых версиях вам нужно создать расширение оболочки, если вам нужен значок.

В Vista вы можете преобразовать значок в 32-битное растровое изображение ARGB и установить его в качестве пункта меню.растровое изображение.

В XP и старше вы должны использовать HBMMENU_CALLBACK или пользовательское рисование.

Простое использование простого растрового изображения имеет проблемы с прозрачностью.Windows 95 и NT4?не поддерживают метод простого растрового изображения, и использование проверенных / непроверенных растровых изображений имеет проблемы как с размером, так и с прозрачностью.

...