Интеграция в контекстное меню проводника Windows
Я хочу написать небольшой инструмент, который делает следующее:
При щелчке правой кнопкой мыши по файлу с определенным расширением файла в контекстном меню проводника Windows отображается дополнительная запись.
Когда вы нажимаете эту запись, один из EXE запускается с этим файлом в качестве одного из его параметров.
Я хотел бы использовать для этого С#/.NET 2.0. Если это невозможно, я мог бы также сделать это с С++/Win32.
Мои вопросы:
- Возможно ли это с С#.NET 2.0?
- Каковы необходимые функции для интеграции в контекстное меню проводника Windows?
- Как я могу сделать это постоянным? (Я не хочу перезапускать этот инструмент после каждой загрузки)
- Чему я должен заботиться? (разные ОС, разрешения безопасности и т.д.).
Ответы
Ответ 1
Вам нужно будет получить доступ к реестру и добавить ключ в root\\File\\shell
или root\Folder\\shell
, в зависимости от того, какие элементы вы хотите видеть в меню.
Попробуйте эту статью в CodeProject, это очень полезно.
Изменить: там другая статья здесь, которая может быть полезной.
Ответ 2
Все, что вам нужно сделать, это добавить некоторые вещи в реестр. Так что да, вы можете сделать это с помощью .NET 2.0. Вот пример того, как добавить Edit с помощью Notepad.
% 1 - это выбранный файл, если я правильно помню.
Ответ 3
Это, кстати, не поддерживается для использования .NET для расширений оболочки из-за текущей неспособности размещать несколько версий среды выполнения в одном и том же процессе (.NET 4 поднимет это ограничение).
Рассмотрим случай, когда у вас есть два расширения оболочки; один для .NET 3.5, один для .NET 1. Какая среда выполнения будет загружена в ваш процесс? Ну, это более или менее случайное - это зависит от того, какое расширение оболочки загружается первым. Иногда это может быть среда выполнения 2.0, иногда это может быть время выполнения 1.1.
Это также проблема, если .NET-программа создает общие диалоги файлов; расширение вашей оболочки может или не может загружаться и может работать или не работать с правильной версией времени выполнения.
Таким образом, если вы спуститесь на маршрут расширения оболочки, вы должны использовать собственный С++/COM/Win32.