Откройте контекст Shell / PopupMenu в моем приложении - PullRequest
0 голосов
/ 15 марта 2020

Я пишу свой собственный файловый менеджер в SFML. Я создам свое собственное всплывающее меню, но я думаю, что некоторые люди хотели бы также использовать параметры по умолчанию для элементов (папок, файлов, ярлыков). Поэтому одним из параметров в моем всплывающем меню будет «Открыть контекстное меню по умолчанию здесь». Но я не знаю, как это сделать. Я провел некоторое исследование и прочитал много тем, статей, документации WinAPI и других ресурсов. Я попытался смоделировать щелчок правой кнопкой мыши в другом окне, я попытался смоделировать сочетание клавиш Shift + F10. Сейчас я борюсь с меню. Но у меня все еще нет результатов. Я видел нечто подобное в проводнике файлов, который я использовал раньше. Это должно быть решение.

Я нашел это Показать системное меню из другого процесса (используя WinForms, c#) Но это активирует стандартное меню windows (alt + пробел) но я хочу щелкнуть правой кнопкой мыши меню (Shift + F10).

1 Ответ

0 голосов
/ 15 марта 2020

Вы не можете открыть всплывающее меню по умолчанию для файла / папки. Но вы можете создать свое собственное меню и заполнить его пунктами меню, относящимися к файлу / папке, и вызывать эти элементы при нажатии, используя собственный интерфейс файла / папки IContextMenu.

В двух словах, вы получаете IContextMenu для нужного файла / папки, например, через IShellFolder::GetUIObjectOf() или IShellItem::BindToHandler(), а затем вы используете метод IContextMenu::QueryContextMenu() для заполнения вашего меню элементами, а также метод IContextMenu::InvokeCommand() для вызова команд из этих элементов.

Раймонд Чен написал серию статей на эту тему, в которой показано, насколько сложной может быть эта задача. Здесь слишком много информации для размещения.

Как разместить IContextMenu, часть 1 - Начальный набор

Как разместить IContextMenu, часть 2 - Отображение контекстного меню

Как разместить IContextMenu, часть 3 - Место вызова

Как разместить IContextMenu, часть 4 - Контекст ключа

Как разместить IContextMenu, часть 5 - Обработка сообщений меню

Как разместить IContextMenu, часть 6 - Отображение справки меню

Как разместить IContextMenu, часть 7 - Вызов глагола по умолчанию

Как разместить IContextMenu, часть 8 - Оптимизация для команды по умолчанию

Как разместить IContextMenu, часть 9 - Добавление пользовательских команд

Как разместить IContextMenu, часть 10 - Составные расширения - основы

Как разместить IContextMenu, часть 11 - Composite extensio нс - состав

...