Как добавить новые элементы в событие щелчка правой кнопкой мыши на Папки и файлы в Windows?

Я сделал несколько обучающих программ по Google.

Я могу добавить пункт меню, щелкнув правой кнопкой мыши на ПАПКУ, выполнив следующие действия:

[HKEY_CLASSES_ROOT\Directory\shell\Command]
@="TestRightClick:"

[HKEY_CLASSES_ROOT\Directory\shell\Command\Command]
@="myExecutable.exe %L"

Мне нужно добавить это в файл также.

1) Где я могу добавить его в реестр?

2) И как мне передать параметры в мой исполняемый файл, если я выбираю несколько файлов?

Связанные с:

Как передать несколько путей к файлам / папкам с помощью события щелчка правой кнопкой мыши (глагол) в исполняемый файл?

4 ответа

Решение
  1. Файлы имеют контекстное меню по расширению. Добавьте ключи реестра Command к соответствующему расширению или HKEY_CLASSES_ROOT\*, чтобы повлиять на все файлы.
  2. Вы можете использовать%1, чтобы передать имя файла приложению (так же, как вы указали%L выше). Если вы выберете несколько файлов, каждый из них будет вызван отдельно, как если бы вы щелкнули правой кнопкой мыши по каждому из них в отдельности.

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

Вы можете сделать это с помощью моей единственной программы. Расширения оболочки не включены.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\SystemFileAssociations\.txt\Shell\p4merge]
"MultiSelectModel"="Player"

[HKEY_CLASSES_ROOT\SystemFileAssociations\.txt\Shell\p4merge\Command]
@="\"d:\\singleinstance.exe\" %1 \"C:\\Program Files\\Perforce\\p4merge.exe\" $files --si-timeout 400"

Ключевое слово, которое вы ищете, это "глаголы" или "обработчики", а не "события".

Глаголы контекстного меню для определенных расширений файлов могут быть помещены в ProgID для типа файла, ключа Perceived Type (если тип файла имеет предполагаемый тип), ключа AllFileSystemObjects или ключа базового класса (*).

Обратите внимание, что запись на эти ключи в HKEY_CLASSES_ROOT улей перенаправит записи в HKEY_LOCAL_MACHINE\Software\Classesи потребует повышенных привилегий. Если вы напишите в HKEY_CURRENT_USER\Software\Classes дерево, вы можете сделать это со стандартными правами пользователя.

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

На MSDN обязательно прочитайте

См. https://github.com/Beej126/SingleInstanceAccumulator для реализации C# хорошо носимого подхода Mutex + COPYDATA к этому.

другие стэки о выражают потребность.

Конфигурация контекстного меню проводника

::creates the entry
:: and crucial multi-file handling property
reg add "HKEY_CLASSES_ROOT\FileType\shell\YourNewContextMenu" /f /v "MultiSelectModel" /d "Player"

::your desired command line
reg add "HKEY_CLASSES_ROOT\FileType\shell\YourNewContextMenu\command" /f /ve /t REG_EXPAND_SZ /d "***see command line examples***"

Например, в моей системе для файлов ".mov" я бы заменил FileType выше с VLC.mov

Комплексный пример REG ADD

Замените "* см. Примеры командной строки *" выше на желаемую командную строку.
Примечание: кавычки и переменные окружения должны быть экранированы и экранировать работу немного по-другому для начальной команды по сравнению с более поздней строкой!?!

λ reg add "HKEY_CLASSES_ROOT\VLC.mov\shell\Transcode\command" /f /ve /t REG_EXPAND_SZ /d "\"^%bin^%\SingleInstanceAccumulator\" -f \"-c:powershell -ExecutionPolicy bypass "\"^%bin^%\test.ps1\"" -list '$files'\" \"%1\""

Использование SingleInstanceAccumulator.exe

"-c:command line" (default: cmd /c echo $files && pause)
  $files will be replace with aggregated list

-f = output each item on separate line to new tempfile
  $files will be replaced by the tempfile path
  quote will default to nothing

-d:delimiter (default: ,)
-q:quote (default: ")
-t:timeout millisecs (default: 200)
-w = hidden launch
-v = debug output

Примеры командной строки

примечание: исходная команда должна иметь путь для работы оболочки> команда

PowerShell и временный файл

примечание: -f использование

"%bin%\SingleInstanceAccumulator" -f "-c:powershell -ExecutionPolicy bypass "%bin%\test.ps1" -list '$files'" "%1"

PowerShell и встроенный список файлов

примечание: -q использование

"%bin%\SingleInstanceAccumulator" -q:' "-c:powershell -ExecutionPolicy bypass "%bin%\test.ps1" -list $files" "%1"

test.ps1 (с временным файлом)

powershell
param(
  [String]$listFilePath
)

gc $listFilePath | % { $_ }

pause

erase $listFilePath

pause

test.ps1 (с массивом файлов parm)

param(
  [String[]]$filesList
)

$filesList | % { $_ }

pause
Другие вопросы по тегам