Как добавить пункт контекстного меню в Windows Explorer для папок

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

Я хотел бы сделать то же самое для папки и не нашел способ сделать это (пока). Я вижу статьи о создании / написании пользовательских обработчиков контекстного меню, но я бы не хотел идти туда.

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

Я хотел бы иметь возможность добавить свое пользовательское приложение в контекстное меню, чтобы оно работало как с файлами, так и с папками. Есть ли способ сделать это без написания обработчика контекстного меню?

3 ответа

Контекстное меню для щелчка правой кнопкой мыши на папках в левой панели Windows Explorer или на фоне каталога в правой панели:

  1. HKEY_CLASSES_ROOT \ Directory \ Background \ shell, если вы администратор
  2. HKEY_CURRENT_USER\Software\Classes\directory\Background\shell, если вы обычный пользователь

Контекстное меню для щелчка правой кнопкой мыши по папкам в правой панели Windows Explorer:

  1. HKEY_CLASSES_ROOT \ Directory \ shell, если вы являетесь администратором
  2. HKEY_CURRENT_USER\Software\Classes\directory\shell, если вы обычный пользователь

Контекстное меню для любого файла:

  1. HKEY_CLASSES_ROOT \ * \ shell, если вы администратор
  2. HKEY_CURRENT_USER\Software\Classes\*\shell, если вы обычный пользователь

Во всех случаях:

  1. добавьте новый ключ в "shell", назвав его так, как вы хотите назвать пункт контекстного меню
  2. добавить новый ключ внутри этого ключа с именем command (обязательное имя)
  3. измените свойство "default" в "command" наmyprogrampath\path\path\executetable.exe %1, чтобы передать путь к файлу и имя выбранного файла в вашу пользовательскую программу

Больше настроек:

  • Добавить значок: добавляет строковое значение с именем icon для ключа, созданного на шаге 1, со значением, соответствующим пути ресурса значка. Вы также можете предоставить целочисленные аргументы, чтобы указать, какой значок использовать. Пример: %SystemRoot%\System32\shell32.dll,3
  • Отображать только при нажатии Shift: добавляет пустое строковое значение с именем Extended для ключа, созданного на шаге 1
  • Настроить метку входа в меню: изменить значение по умолчанию для ключа, созданного на шаге 1
  • Изменить расположение пункта меню: добавляет строковое значение с именем Position с одним из: Top, Bottom

Нашел более чистое, простое и быстрое решение: создайте текстовый файл, заполните его этим содержимым, обновите его в соответствии с вашими потребностями, сохраните с суффиксом.reg и запустите его (для этого не требуются права администратора, поскольку он обращается к пользовательской части реестра).):

Windows Registry Editor Version 5.00

; Setup context menu item for click on right panel:
[HKEY_CURRENT_USER\Software\Classes\directory\Background\shell\MenuItemNameBackground\command]
@="C:\\yourpath\\executable.exe \"%1\""

; Optional: specify an icon for the item:   
; HKEY_CURRENT_USER\Software\Classes\directory\Background\shell\MenuItemNameBackground]
;"icon"="C:\\yourpath\\appicon.ico"

; Optional: specify a position in the menu
; HKEY_CURRENT_USER\Software\Classes\directory\Background\shell\MenuItemNameBackground]
;"position"="Bottom"

; -------------------------------------------------------------------------------------

; Setup context menu item for click on folders tree item:
[HKEY_CURRENT_USER\Software\Classes\directory\shell\MenuItemNamePanel\command]
@="C:\\yourpath\\executable.exe \"%1\""

; Optional: specify an icon for the item:   
; [HKEY_CURRENT_USER\Software\Classes\directory\shell\MenuItemNamePanel]
;"icon"="C:\\yourpath\\appicon.ico"

; Optional: specify a position in the menu
; [HKEY_CURRENT_USER\Software\Classes\directory\shell\MenuItemNamePanel]
;"position"="Top"

Таким образом, вы также можете создать резервную копию своей конфигурации: просто сохраните файл.reg в безопасном месте. Если вы вручную редактируете реестр после запуска файла, щелкните правой кнопкой мыши и выберите "экспорт".

Остерегайтесь двойного возврата в пути: \\

Я нашел решение в следующей статье, которая описывает, как сделать это через реестр для файлов, а также для папок:

Следующие две статьи предоставили дополнительную информацию и опции:

Я вернулся и также ответил на это в другой теме, так как по этому вопросу, кажется, не так много особенного.

Я обнаружил, что самым простым способом было добавить строковое значение к ключу под названием "AppliesTo" и установить его значение в "under: {path}"

В моем примере я хочу, чтобы он смотрел только в T Drive, поэтому мое значение String равно "AppliesTo":"under:T:".

В C# это легко сделать с помощью следующего:

RegistryKey _key = Registry.ClassesRoot.OpenSubKey("Folder\\Shell", true);
RegistryKey newkey = _key.CreateSubKey("My Menu Item");
newkey.SetValue("AppliesTo", "under:T:");

RegistryKey subNewkey = newkey.CreateSubKey("Command");
subNewkey.SetValue("", "C:\\yourApplication.exe");
subNewkey.Close();

newkey.Close();
_key.Close();

Единственное хорошее решение, которое я нашел действительно работающим, это: https://superuser.com/questions/1097054/shell-context-menu-registry-extension-doesnt-work-when-default-program-is-other

Добавьте ключи в HKEY_CLASSES_ROOT \ SystemFileAssociations \your.extension\ shell \ command Измените последний ключ с помощью команды, которую вы хотите выполнить.

Для моей цели это было:

"C:\Program Files (x86)\GPSBabel\gpsbabel.exe" -r -i gpx -f "%1" -x simplify,count=1000 -o gpx -F "%1.gpx"

Если я экспортирую это, я получаю.reg:

[HKEY_CLASSES_ROOT\SystemFileAssociations\.gpx\shell\Simplify gpx\command]
@="\"C:\\Program Files (x86)\\GPSBabel\\gpsbabel.exe\" -r -i gpx -f \"%1\" -x simplify,count=1000 -o gpx -F \"%1.gpx\""

Откройте командную строку [запуск от имени администратора] и выполните эту команду

reg add "HKEY_CLASSES_ROOT\Directory\shell\Refi2\command" /d "powershell.exe -noexit -command Set-Location -literalPath '%V'"
  • -d: значение для выполнения [имя приложения exe].
  • -v: создает новый подключ внутри командного ключа.
  • -f: принудительно переопределить ключ, если он уже существует.
  • powershell.exe -noexit -command Set-Location -literalPath '%V' вместо этого вы можете указать путь к вашему exe.

Для получения дополнительной информации о дополнительных функциях выполните:-

reg add /?
Другие вопросы по тегам