Як додати пункт контекстного меню до Провідника 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властивість in, commandщоб myprogrampath\path\path\executable.exe %1передати шлях до файлу та ім'я вибраного файлу до власної програми

Більше налаштувань:

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

2
HKEY_CLASSES_ROOT\Directory\Background\shellможе впливати лише на клацання правою кнопкою миші на тлі каталогу
Амос

21
Це має бути "%1"на випадок, якщо шлях має пробіли.
Blrp

3
негайно. Навіть не потрібно відкривати нове вікно провідника: нові налаштування завантажуються, як тільки ви клацаєте правою кнопкою миші.
стрибок

1
здається, змінні середовища не працюють Command, правда?
Джек Лу

14
Щодо мого попереднього коментаря: Проблему можна виправити, замінивши %1на %V.
Michael Herrmann

10

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

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

У моєму прикладі я хочу, щоб він дивився лише на диску T, тому моє значення String - "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 \ Змініть останній ключ за допомогою команди, яку ви хочете зробити.

Для моєї мети це було:

"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 /?
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.