WinAPI: вызов контекстного меню, предоставляемый расширением оболочки - PullRequest
0 голосов
/ 30 сентября 2010

Программное обеспечение Dropbox предоставляет расширение оболочки, которое добавляет пункты контекстного меню ко всем файлам в определенной папке. Один из них генерирует публичную ссылку для просмотра выбранного файла.

В инструменте C # я хочу вызвать эту запись без какого-либо взаимодействия с пользователем. Я хочу добиться того же поведения, как если бы пользователь щелкнул пункт контекстного меню выбранного файла.

Я знаю, что расширение оболочки предоставляется DLL, возможно ли сделать вызов этой DLL для достижения ожидаемого поведения?

1 Ответ

2 голосов
/ 01 октября 2010

В расширениях оболочки реализовано IContextMenu , и можно выполнять команды меню без отображения меню (подробности о "хостинге" IContextMenu см. в этом блоге )

Получив меню, вы вызываете IContextMenu :: GetCommandString и ищите конкретный глагол. Если Dropbox не имеет несколько уникального глагола, вам придется сделать что-то хакерское, либо сопоставить только по тексту меню, или вызвать dll расширения оболочки Dropbox напрямую (экспорт DllGetClassObject) и подделать все (притворяться COM и оболочкой) или, если вы знаете CLSID, вы можете по крайней мере получить помощь от COM и просто выполнить часть оболочки.

Существует бесплатный инструмент под названием runmenu , который позволяет вам играть с меню оболочки / IContextMenu (я уверен, что вы можете найти копию где-нибудь)

...