Windows Добавление каскадных меню в контекстные меню Рабочего стола и Моего компьютера

  • Автор темы Автор темы OKshef
  • Дата начала Дата начала
Может относиться для любой версии Windows

OKshef

Постоянный участник
Сообщения
248
Реакции
290
Мне понравилась идея и я попробовал создать каскадное меню, содержащее ярлыки программ, которое позволяет оптимизировать группировку программ. Например, вы можете создавать различные каскадные меню, содержащие определенные приложения, браузеры, медиа проигрыватели, ярлыки на системные команды и утилиты, и при наведении курсора мыши на них, они открывают список, содержащий все ваши любимые программы.

sshot-101.webp

sshot-102.webp

Рассмотрим создание каскадного меню в контекстном меню Рабочего стола и ярлыка Компьютер в Windows 7.

Это руководство разделено на две части:
  • Создание каскадных меню и добавление ярлыков программ
  • Определение функционирования ярлыков путем их регистрации
Часть 1: Создание каскадных меню и добавление ярлыков программ

1. В строке поиска меню Пуск или в меню Выполнить напечатайте regedit и нажмите Ввод. Таким образом открываем редактор реестра.

2. Для добавления каскадного меню в контекстное меню Рабочего стола перейдите к следующему разделу реестра:

HKEY_CLASSES_ROOT\DesktopBackground\Shell

Для добавления каскадного меню в контекстное меню значка Компьютер перейдите к следующему разделу реестра:

HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell

Примечание: дальнейшие действия идентичны для указанных выше контекстных меню.

3. Необходимо создать новый подраздел в разделе «Shell«.
Нажмите правую кнопку мыши на разделе «Shell» и выберите «Создать – Раздел«.
Присвойте произвольное имя новому подразделу, например «Menu1» (без кавычек).

4. Установите курсор на новом разделе «Menu1″. В правой части редактора реестра нажмите правую кнопку мыши и выберите Создать – Строковый параметр. Необходимо создать 4 строковых параметра со следующими именами:
  • MUIVerb
  • SubCommands
  • Icon
  • Position

Параметры Icon и Position не обязательны, в отличие от параметров MUIVerb и SubCommands, которые являются обязательными.

Значение параметра MUIVerb определяет отображаемое имя каскадного меню. Вы можете присвоить произвольное имя. Например: Браузеры, Программы и т.п.

Значение параметра SubCommands содержит команды, разделенные точкой с запятой (;), которые вы хотите поместить в каскадное меню. Здесь нельзя добавить любой ярлык непосредственно на программу. Сначала нужно определить команду для имени в этом списке, и после этого зарегистрировать ее, используя вторую часть руководства.

5. Предположим, вы создали каскадное меню «Программы» на шаге 3 и теперь хотите добавить в него команды запуска Блокнота и Калькулятора. В этом случае, вам необходимо установить следующее значение параметра:

notepad;calc

Вы также можете использовать np;ca вместо notepad;calc, но в таком случае вы должны использовать то же имя при регистрации этих команд во второй части руководства.

6. Значение параметра Icon используется опционально. С помощью этого параметра вы можете задать отображаемую иконку каскадного меню. В данном примере мы используем иконку Проводника. Для этого значение параметра Icon установим explorer.exe.

7. Значение параметра Position определяет позицию каскадного меню в контекстном меню. Если параметр Position отсутствует или его значение не задано, каскадное меню располагается в центре контекстного меню.

Вы моежет использовать значения Top – для расположения каскадного меню вверху контекстного меню или Bottom – для расположения его внизу контекстного меню.

sshot-98.webp

Часть 2: Определение функционирования ярлыков путем их регистрации

После добавления ярлыков программ в каскадное меню, вам необходимо зарегистрировать команды, упомянутые в значении параметра SubCommands, используя следующий метод:

1. Перейдите к следующему разделу реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\Shell

2. В этом разделе мы должны создать новый подраздел для каждой команды, указанной в значении параметра SubCommands.

В нашем примере мы использовали две команды: notepad и calc. Следовательно, необходимо создать два дополнительных раздела реестра в разделе CommandStore\Shell с именами notepad и calc.

3. После создания раздела измените значение параметра «По умолчанию» (в правой части редактора реестра) на имя, которое будет отображаться для указанного пункта каскадного меню. Например установите его значение «Блокнот» или «Калькулятор» или любое другое.

4. Если вы хотите, чтобы отображалась иконка слева от имени пункта каскадного меню, необходимо создать новый строковый параметр с именем Icon и значением равным пути к файлу, содержащему иконку.

Например, значение параметра может быть calc.exe или C:\Windows\System32\calc.exe для отображения иконки калькулятора для пункта каскадного меню Калькулятор.

5. В каждом из новых разделов реестра (в нашем примере это calc и notepad) необходимо создать подраздел с именем command.

В новом разделе command в правой части редактора реестра измените значение параметра «По умолчанию» установив его равным абсолютному пути к исполняемому файлу программы, которая будет запускаться при нажатии на соответствующий пункт каскадного меню. В случае с калькулятором или блокнотом можно указывать только имя исполняемого файла так как они находятся в папках, зарегистрированных в переменных среды.

Например: для запуска калькулятора при выборе пункта каскадного меню Калькулятор значение параметра По умолчанию в разделе command установите calc.exe.

sshot-103.webp

Содержимое файлов реестра для автоматического добавления каскадных меню

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

Каскадное меню Программы для контекстного меню Рабочего стола:
Код:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\DesktopBackground\Shell\Menu1]
"MUIVerb"="Программы"
"SubCommands"="notepad;calc"
"icon"="explorer.exe"
"Position"="bottom"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\notepad]
@="Блокнот"
"icon"="notepad.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\notepad\command]
@="notepad.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\calc]
@="Калькулятор"
"icon"="calc.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\calc\command]
@="calc.exe"

Каскадное меню Программы для контекстного меню Компьютер:
Код:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Menu1]
"MUIVerb"="Программы"
"SubCommands"="notepad;calc"
"icon"="explorer.exe"
"Position"="bottom"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\notepad]
@="Блокнот"
"icon"="notepad.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\notepad\command]
@="notepad.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\calc]
@="Калькулятор"
"icon"="calc.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\calc\command]
@="calc.exe"

Вы можете изменить содержимое представленных reg-файлов по своему усмотрению для добавления других каскадных меню или других пунктов каскадного меню. Изменяемые значения выделены жирным шрифтом в коде.

Для удаления каскадных меню удалите разделы реестра, созданные на шаге 3 первой части руководства и на шаге 2 второй части.

Данная статья является адаптированным переводом статьи, автором которой является Vishal Gupta.

Источник

Добавлено через 6 минут 18 секунд
Аналогичная статья с интересными дополнениями в Блоге Вадима Стеркина:

Как добавить раскрывающиеся меню в контекстное меню рабочего стола и компьютера

Создание раскрывающегося меню с несколькими уровнями вложенности

Выше я продемонстрировал, как создать раскрывающееся меню со списком пунктов. Эти пункты тоже можно сделать раскрывающимися, т.е. возможно создание вложенных меню, как показано на рисунке ниже.

cascade_menu13_mini_oszone.webp


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

  1. В разделе реестра
    Код:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\Shell
    создайте ярлыки для двух новых пунктов (Дефрагментация диска и Очистка диска), следуя инструкциям в разделе статьи «Регистрация команд в реестре». Я назвал подразделы defrag иcleanmgr.

  2. В том же разделе реестра создайте подраздел disk-menu (название может быть любым). Дальше все будет очень похоже на то, что вы проходили в первом разделе статьи.
  3. В подразделе disk-menu создайте строковые параметры:
    • MUIVerb для названия меню, например, со значением Диск
    • Icon для значка меню, например со значением imageres.dll,31
    • SubCommands для ярлыков этого меню (в данном случае со значением defrag;cleanmgr)
  4. Если вы хотите использовать разделитель, создайте параметр REG_DWORD с именем CommandFlagsи шестнадцатеричным значением:
    • 20 для размещения разделителя над пунктом меню
    • 40 для размещения разделителя под пунктом меню
Я задал значение 40, поскольку планирую сделать меню первым пунктом и отделить его от остальных.

В реестре должна получиться такая картина:

cascade_menu17_mini_oszone.webp
Увеличить рисунок

Вложенное меню готово, и осталось лишь указать на него ссылку в родительском меню, как было описано в разделе статьи «Создание раскрывающегося меню и добавление в него пунктов». Следуя моему примеру, в разделе

Код:
HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Menu1
параметр SubCommands должен принять следующий вид:

Код:
disk-menu;regedit;taskmgr;devmgmt
Таким образом, раскрывающееся меню будет содержать вложенное меню disk-menu (Диск) первым пунктом, а также три отдельных пункта: Редактор реестра, Диспетчер задач и Диспетчер устройств.

Если вы запутались или у вас что-то не получается, удалите созданные разделы и параметры, а затем импортируйте приведенный ниже REG-файл.

+ expand source
Более глубокий уровень вложенности достигается аналогичным образом. В параметре SubCommands длявложенного меню указывается ссылка на команду в разделе CommandStore, содержащую параметры следующего уровня вложенности.

cascade_menu14_mini_oszone.webp

Чтобы изменить порядок меню, нужно прописать его в качестве значения для параметра (По умолчанию) в разделе

Код:
HKEY_CLASSES_ROOT\DesktopBackground\Shell

Дважды щелкните параметр (По умолчанию) и введите названия разделов меню в реестре в желаемом порядке через запятую:

Код:
Display,Gadgets,Personalize,WinApps,Admin,System

cascade_menu15_mini_oszone.webp


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

Алфавитный порядок разделов реестра, соответствующих пунктам меню


Описанным выше способом можно изменить порядок отдельных пунктов и раскрывающихся меню в контекстном меню компьютера. С той лишь разницей, что параметр (По умолчанию) изменяется в разделе

Код:
HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell
Однако при этом в меню компьютера стандартный пункт Открыть смещается вниз и не выделяется жирным, поскольку нарушается встроенный в систему порядок пунктов меню.

cascade_menu18.webp

Если вас это не устраивает, просто удалите параметр (По умолчанию). Он будет восстановлен без значения, и пункт Открыть вернется на свое место.

Можно отсортировать пункты иначе, используя алфавитный порядок названий разделов собственных меню. Достаточно начать названия, например, с последней буквы латинского алфавита (z) и цифры, определяющей порядок пункта.

cascade_menu16_mini_oszone.webp



В принципе, этот же способ можно использовать и для сортировки меню рабочего стола.

 
Последнее редактирование модератором:
Настало время дополнить статью несколькими нюансами,которые были мною выявлены в ходе некоторых исследований.

Это,разумеется, не документировано - видимо ребята из microsoft решили не заморачиваться.
Те у кого ничего не выйдет просто откажутся от опции,а те кто пытливый сами пусть догадываются.
Или вообще они там сами не в курсе)

Первое на что стоит обратить внимание - это ограничение на количество объектов,которые можно добавить к каскадному контексному меню.

Их всего может быть не более 13 в общем объеме включительно.

Такая вот чертова дюжина)

Что это значит?

А значит что вы можете сделать например 3 вложенных меню с 4 пунктами и еще одно которое не будет раскрываться так как оно будет являться уже 13 по счету.
Либо 2 меню в одном из которых например 7 пунктов а во втором 6,а все последующие отображаться не будут.

И так далее по аналогии.


.webp



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

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

2.webp


Что ж,видимо не было такой задачи у него.

Мы,конечно же,сообщим Вадиму об этом нюансе,так как тема у него достаточно читаема и сколько народу вывих мозга может получить...:Biggrin:



Но кроме всего этого имеется еще один замечательный нюанс.

Само собой мало кому захочется такую работу проделать руками в реестре.
Для этого существует такой инструмент командной строки как утилита reg.exe!

Итак ,из поста выше мы уже знаем что вложенное меню должно иметь параметр,задающий ему имя : MUIVerb
При этом параметр по умолчанию должен иметь значение : "значение не присвоено"

upload_2014-7-5_21-25-9.webp


Но именно в разделах типа
Код:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\Shell

Утилита reg.exe этого сделать не может.
По необъяснимым причинам.

Причем не напрямую,не путем создания через твик...так что тут либо руками работаем либо готовим заведомо рабочий твик.

Подробнее о разборе этого бага можно прочитать тут:
Обойти баг cmd и regedit

И кое что еще: если вы писали список меню в параметр SubCommands и в одноим из имен допустили ошибку,то последующие пункты тоже не появятся.

Удачи)

Надеюсь в скором времени разобрать еще один любопытный баг данной тематики,конечно же все будет изложено.


+ даю ссылку на тему с практическим применением твиков контексного меню:
Статьи - Аналог букмарклетов в контексном меню.


SafeZone.cc
 
Последнее редактирование:
Здравствуйте,
пожалуйста подскажите где тут ошибка?
Код:
Windows Registry Editor Version 5.00
;MF_Shorehan
[HKEY_CLASSES_ROOT\DesktopBackground\Shell\Fehrast1]
"MUIVerb"="Shorehan"
"SubCommands"="Firefox;Opera;IE"
"Icon"="D:\1_SHORIDAHO\Opera\Launcher.exe"
"Position"="Top"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Firefox]
@="Firefox"
"Icon"="D:\1_SHORIDAHO\MOZILLA\firefox.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Firefox\command]
@="D:\1_SHORIDAHO\MOZILLA\firefox.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\Opera]
@="Opera"
"Icon"="D:\1_SHORIDAHO\Opera\Launcher.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\command]
@="D:\1_SHORIDAHO\Opera\Launcher.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\IE]
@="IE"
"Icon"="C:\Program Files\Internet Explorer\iexplore.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\shell\command]
@="C:\Program Files\Internet Explorer\iexplore.exe"
Aks 1.webp
 
Последнее редактирование модератором:
Здравствуйте.
Проверьте наличие и содержимое раздела:
Код:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\Opera]
 
ошибку нашел и поправил, увы Значение Opera в реестре не появляется, а Firefox и IE Ок ?

Код:
Windows Registry Editor Version 5.00
;MF_Shorehan
[HKEY_CLASSES_ROOT\DesktopBackground\Shell\Fehrast1]
"MUIVerb"="Shorehan"
"SubCommands"="Firefox;Opera;IE"
"Icon"="D:\1_SHORIDAHO\Opera\Launcher.exe"
"Position"="Top"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Firefox]
@="Firefox"
"Icon"="D:\1_SHORIDAHO\MOZILLA\firefox.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Firefox\command]
@="D:\1_SHORIDAHO\MOZILLA\firefox.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Opera]
@="Opera"
"Icon"="D:\1_SHORIDAHO\Opera\Launcher.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Opera\command]
@="D:\1_SHORIDAHO\Opera\Launcher.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\IE]
@="IE"
"Icon"="C:\Program Files\Internet Explorer\iexplore.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\shell\IE\command]
@="C:\Program Files\Internet Explorer\iexplore.exe"
Aks 1.webp
Проверьте наличие и содержимое раздела
посмотрел, нет такого раздела
 
Последнее редактирование модератором:
На скрине
увы Значение Opera в реестре не появляется, а Firefox и IE Ок ?
посмотрел, нет такого раздела
На скрине видно что раздел есть,но отсутствует параметр icon,что приводит к отсутствию иконки в пункте меню.

Данные пункты конечные,дополнительно выпадающих тройных пунктов не будет?
 
На скрине видно что раздел есть,но отсутствует параметр icon,что приводит к отсутствию иконки в пункте меню.
вот это разве не добавляет иконку или я ошибаюсь?
Код:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Opera]
@="Opera"
"Icon"="D:\1_SHORIDAHO\Opera\Launcher.exe"
и в этом твике указал путь на иконку Opera, а в Контекстном меню иконка Opera отсутствует
[HKEY_CLASSES_ROOT\DesktopBackground\Shell\Fehrast1]
"MUIVerb"="Shorehan"
"SubCommands"="Firefox;Opera;IE"
"Icon"="D:\1_SHORIDAHO\Opera\launcher.exe"
"Position"="Top"
Aks 1.webp
Данные пункты конечные,дополнительно выпадающих тройных пунктов не будет?
цель добиться, чтобы было выпадающих тройных пунктов, то есть Параметр MUIVerb "Shorehan" и Параметр SubCommands "Firefox;Opera;IE"
 
Последнее редактирование модератором:
Оформляйте код тегом!
Как видно не добавляет.
Какая ОС? В какой кодировке работаете?
Сделайте экспорт.
Добавьте вручную параметр и сделайте экспорт,файлы прикрепите.

Может вам дать мою заготовку - под себя переделаете и все?

.webp

+ я думаю вам эта тема тоже пригодится:
Статьи - Аналог букмарклетов в контексном меню.
 
ОС-Windows 7x64_Ultimate, кодировка --Notepad++_UTF8
DllPok, вы наступаете на свои же грабли!
Уже было: Windows - Основы работы с реестром - синтаксис, структура reg-файла.
Кодировку смените.
Опять неверно работаете с reg-файлами.
Однако раздел по реестру не просто так создавался,не с потолка писалось - иногда читайте,если интересуетесь реестром.

Вместо того,что вы хотите - добавляется,например, такая порнуха:
CMD/BATCH:
D:1_SHORIDAHOOperaLauncher.exe

Мои исходники возьмите,что бы не изобретать велосипед,под себя переделайте.
Если будут трудности - пишите,поможем.

Исходники в двух вариантах лежат в этой теме.

Советую работать с последним шаблоном который твикает батником.
Меньше подводных камней будет.
 
Последнее редактирование:
Да всегда пожалуйста))
В общем,если что - пишите где не понятно.

В вашем твике я бы,например,добавил дополнительно меню для каждого браузера с например очисткой,стартовой страницей и парой любимых сайтов.
 
В вашем твике я бы,например,добавил
пожалуйста объясните, добавление пунктов в Контекстное меню влияет на быстродействии Проводника?
пожалуйста подскажите где тут ошибка?
поменял путь Opera и все получился, то есть вместо ...Opera\launcher.exe вставил \Opera\31.0.1889.174\\opera.exe, еще раз спасибо
Koza Nozdri
OKshef
Aks 1.webp
 
пожалуйста объясните, добавление пунктов в Контекстное меню влияет на быстродействии Проводника?
Непосредственно наличие дополнительных пунктов - нет.
Но если в пунктах появляются ссылки на проблемные места,то проводник при открытии контексного меню может "тормозить".
Так же часто вредоносное программное обеспечение добавляет свои пункты,дополнительно обеспечивая возможность случайного запуска.

Еще вопросы есть?
то есть вместо ...Opera\launcher.exe вставил \Opera\31.0.1889.174\\opera.exe
Кстати - часто иконки внедрены в ресурсы файла в количестве нескольких штук.
Добыть их можно явно указав номер - например в значение параметра написав
Код:
%SystemRoot%\System32\imageres.dll,-1001

Тогда появится соответствующая иконка.
 
К сожалению не имею справочника по всем библиотекам,так бы поделился.
 
а как узнать номер иконки ?
кому интересно.
Для начала нам нужно сделать видимым Скрытые файлы системы, потому Панель управления→Параметры папок→вкладка Вид и
пункт <Скрывать защищенные системные файлы> и снимаем ✔ далее назначаем иконку на Папку (любую). Открываем Папку и
увидим файл desktop.ini открываем Блокнотом и смотрим вторую строку, это и есть номер иконки, пример
IconResource=C:\Windows\system32\SHELL32.dll,75 значит номер иконки 75 или ж ежели сами создали .ico, так же вторая строчка,пример
IconResource=D:\5_ZiShoridaho\Photoshop\Photoshop_TEMP\icon_10.ico,0 -- номер значка 0
Таким образом можем назначить значок, ту которую сами создали, вот пример
[источник Вадим Стеркин Как задать значок для папки, чтобы он отображался в любой системе – Вадим Стеркин ]
Aks 1.webp
 
Последнее редактирование:
Назад
Сверху Снизу