Как добавить пункт контекстного меню в Windows Explorer для папок
Я узнал, как добавлять контекстные пункты меню в файлы в проводнике Windows правой кнопкой мыши, добавляя ключи в реестр. Т.е. я могу щелкнуть правой кнопкой мыши файл в проводнике и запустить пользовательское приложение для этого файла.
Я хотел бы сделать то же самое для папки и не нашел способ сделать это (пока). Я вижу статьи о создании / написании пользовательских обработчиков контекстного меню, но я бы не хотел идти туда.
Я нашел здесь статью о том, как добавить каскадные пункты контекстного меню на рабочий стол и в "компьютер" в проводнике, но это не работает ни для одной папки.
Я хотел бы иметь возможность добавить свое пользовательское приложение в контекстное меню, чтобы оно работало как с файлами, так и с папками. Есть ли способ сделать это без написания обработчика контекстного меню?
3 ответа
Контекстное меню для щелчка правой кнопкой мыши на папках в левой панели Windows Explorer или на фоне каталога в правой панели:
- HKEY_CLASSES_ROOT \ Directory \ Background \ shell, если вы администратор
- HKEY_CURRENT_USER\Software\Classes\directory\Background\shell, если вы обычный пользователь
Контекстное меню для щелчка правой кнопкой мыши по папкам в правой панели Windows Explorer:
- HKEY_CLASSES_ROOT \ Directory \ shell, если вы являетесь администратором
- HKEY_CURRENT_USER\Software\Classes\directory\shell, если вы обычный пользователь
Контекстное меню для любого файла:
- HKEY_CLASSES_ROOT \ * \ shell, если вы администратор
- HKEY_CURRENT_USER\Software\Classes\*\shell, если вы обычный пользователь
Во всех случаях:
- добавьте новый ключ в "shell", назвав его так, как вы хотите назвать пункт контекстного меню
- добавить новый ключ внутри этого ключа с именем command (обязательное имя)
- измените свойство "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 /?