
Я хочу создать в Windows 7 контекстное меню, вызываемое щелчком правой кнопки мыши, которое будет зависеть от контекста и сможет передавать имя определенного файла/папки в сценарий оболочки.
Я знаю, что это должно быть возможно — например, если у вас есть файл 7zip, вы можете щелкнуть по нему правой кнопкой мыши, а затем сказать «Извлечь здесь», и каким-то образом целевой файл (архив .7z) будет передан программе 7zip.
В частности, у меня есть скрипт, который берет файл .c и помещает его в листинг LaTeX и запускает pdflatex, чтобы сделать файлы, хорошо отформатированные для чтения. Однако мне нужно указать файл как аргумент командной строки. Я хотел бы сделать так, чтобы я мог щелкнуть правой кнопкой мыши по файлу и автоматически запустить этот скрипт, автоматически передавая путь к цели щелчка правой кнопкой мыши в аргумент командной строки.
решение1
Добро пожаловать в SuperUser!
Для этого потребуется редактирование реестра, и это зависит от того, хотите ли вы добавить этот элемент для всех файлов, только для файлов с определенным расширением, папок или и для того, и для другого.
Откройте редактор реестра и перейдите к HKEY_CLASSES_ROOT
. Здесь вы увидите кучу расширений файлов — это то, что управляет контекстным меню.
Добавление обработчика — это один и тот же процесс, независимо от того, к чему вы прикрепляете этот пункт меню, важно только то, где вы его размещаете в реестре.
Процесс выглядит следующим образом:
- Создайте новый ключ под
shell
ключом того, к чему вы добавляете данные. - Если вы хотите, чтобы у этого пункта меню был значок, добавьте строку с именем
Icon
только что созданного вами ключа, указав в качестве значения путь к значку. - Добавить ключподсозданный вами элемент называется
command
- Измените запись (Default) в этом разделе, чтобы она указывала на скрипт, который вы хотите открыть, добавив туда,
"%1"
где в командной строке должно находиться имя файла, передаваемое программе.
А где этот новый пункт меню должен быть? Если вы хотите, чтобы он отображался...
- для всех файлов определенного расширения поместите его под соответствующий ключ расширения (если его не существует, вы можете создать его).
- для всех файлов везде, поместите его под
*
ключ - для всех каталогов поместите его под
Directory
ключ.