Как добавить пункт контекстного меню в проводник Windows для папок [закрыто]

100

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

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

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

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


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

В следующих двух статьях представлена ​​дополнительная информация и варианты:

Элан
источник
1
Этот вопрос открыт уже 6 лет ?! Кто его закрыл шесть дней назад?
Эндрю
ЕДИНСТВЕННОЕ, что мне не нравится в StackOverflow, - это клоуны, закрывающие вопросы или помечающие вопросы как не по теме.
Майкл

Ответы:

209

В редакторе регистрации ( regedit.exe) найдите:

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

    1. HKEY_CLASSES_ROOT\Directory\Background\shell если вы администратор
    2. HKEY_CURRENT_USER\Software\Classes\directory\Background\shell если вы обычный пользователь
  • Контекстное меню для щелчка правой кнопкой мыши по папкам на правой панели проводника Windows:

    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\executable.exe %1передать путь к файлу и имя выбранного файла вашей пользовательской программе

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

  • Добавить значок : добавьте строковое значение с именем iconключа, созданного на шаге 1, со значением, соответствующим пути ресурса значка. Вы также можете указать целочисленные аргументы, чтобы указать, какой значок использовать. Пример:%SystemRoot%\System32\shell32.dll,3
  • Отображать толькоExtended при нажатой клавише Shift : добавляет пустое строковое значение, названное для ключа, созданного на шаге 1
  • Настроить метку пункта меню : изменить значение по умолчанию для ключа, созданного на шаге 1
  • Изменить местоположение пункта меню : добавить значение строки с именем Positionодной из: Top,Bottom
джампджек
источник
2
HKEY_CLASSES_ROOT\Directory\Background\shellможет повлиять только на щелчок правой кнопкой мыши на фоне каталога
Амос
21
Должно быть, "%1"если в пути есть пробелы.
Blrp
3
немедленно. Нет необходимости даже открывать новое окно проводника: новые настройки загружаются, как только вы щелкаете правой кнопкой мыши.
jumpjack 01
1
кажется, переменные среды не работают Command, не так ли?
Джек Лу,
14
Относительно моего предыдущего комментария: проблему можно решить, заменив %1на %V.
Майкл Херрманн
10

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

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

В моем примере я хочу, чтобы он просматривал только T-диск, поэтому мое строковое значение - «AppliesTo»: «под: 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();
Бобби Бирнс
источник
2
Спасибо, что предоставили образец кода для этого на C #. Это небольшая помощь для тех, кто хочет сделать это быстро из приложения.
Ayo I
2
К сожалению, значение «AppliesTo», похоже, не оказывает никакого влияния на запись «Directory \ Background». Кто-нибудь знает, как можно сделать подобное ограничение для щелчка правой кнопкой мыши по фону папки?
cl0rkster
6

Нашли более чистое, простое и быстрое решение: создайте текстовый файл, заполните его этим содержимым, обновите его в соответствии с вашими потребностями, сохраните с суффиксом .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 в надежном месте. Если вы вручную редактируете реестр после запуска файла, щелкните правой кнопкой мыши и выберите «экспорт».

Остерегайтесь двойных пробелов в пути: \\

прыгун
источник
1

Единственное хорошее решение, которое я нашел действительно работающим: /superuser/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:

Windows Registry Editor Version 5.00

[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\""
Дориан Грв
источник
1

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

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 /?
Сахил Шикалгар
источник