Рекомендуемый способ смешивания .NET и файловых контекстных меню - PullRequest
1 голос
/ 12 декабря 2010

У меня есть приложение C # WPF.Он предназначен для работы с любыми файлами.Прямо сейчас он принимает «ввод» с помощью аргументов командной строки, а также перетаскивание в элемент управления в своем главном окне.Тем не менее, в идеале я хочу, чтобы люди щелкали правой кнопкой мыши по любому файлу / нескольким файлам, и чтобы они могли просто нажать «Awesomify this».(Это не настоящее имя.: P)

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

В общем, я понимаю, что в основном есть два способа: чистый реестр и реестр + COM-объект.

Первый имеет определенную элегантность, поскольку я не хочу ничего особенного;однако, насколько я могу судить по документации, эти пункты меню всегда объединяются в одном месте с основными действиями с файлами ( Открыть , Предварительный просмотр , Печать ),Тем не менее, я бы хотел, чтобы мой предмет оказался ниже на тотемном столбе.Если я посмотрю в моем личном контекстном меню случайный файл, я бы хотел, чтобы он находился в «месте» UltraEdit и Malwarebytes Anti-Malware .Вставив мою запись в HKCR\*\shell\AwesomeTest, я получу свой предмет, но независимо от того, что я выберу для Position, я получаю две разные крайности, которые мне не нравятся: Top ставит его над элементом по умолчанию, Bottom ставит егопрямо над Свойства .Я хочу, чтобы он был между Share с и Восстановите предыдущие версии , где большинство инструментов общего назначения, кажется, находят свое место.

Кажется, что нужно еще кое-что почерпнуть из реестраприложения, которые я хочу имитировать, используют маршрут COM-объекта.И это вернуло бы меня (я верю) к нативному коду.Что тогда принесло бы с собой все черты 32-битной и 64-битной разработки, которые я пытаюсь избежать.

Что-то мне не хватает?Точно так же, кроме страницы MSDN, касающейся обработчиков контекстного меню , которую я просмотрел и которая оказалась довольно бесполезной (поскольку кажется, что она скользит, не вдаваясь в более точные детали относительно размещения и тому подобное),Есть какие-нибудь хорошие источники по этой проблеме?

Еще одна вещь, которую я пока не смог выяснить, - это как я могу правильно добавить поддержку IDropTarget в свое приложение .NET WPF, так что информация об этом также будетдобро пожаловать.

Если у кого-то есть мгновенный ответ, хорошо, что это было бы неплохо, но я в основном пытаюсь найти правильный путь, не тратя несколько дней на тупиковые пути.Которого там, похоже, много.(

1 Ответ

1 голос
/ 12 декабря 2010

IContextMenu :: QueryContextMenu ().Расширения оболочки находятся в области C ++, очень неприятно в C #, требуется .NET 4.0.Пример проекта, который использует его здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...