Добавляем собственные команды в контекстное меню Проводника

    Однажды я уже рассказывал на Хабре, как можно добавить собственную команду в контекстное меню браузера Internet Explorer (Удобное дополнение к IE при написании обзоров / Internet Explorer / Хабрахабр). Сейчас я расскажу, как добавить свою команду в контекстное меню Проводника. Поехали.



    Информация о контекстном меню Проводника и Рабочего стола хранится в разделе реестра HKEY_CLASSES_ROOT\Directory\Background\Shell. Именно отсюда система узнает, какие команды нужно отобразить в контекстном меню и какие программы нужно запустить, когда пользователь щелкает по выбранной команде меню. Таким образом, вооружившись этими знаниями, мы сможем сами создавать нужные нам команды.

    Итак, чтобы добавить новую команду в контекстное меню, достаточно создать в разделе HKCR\Directory\Background\Shell новый подраздел. Предположим, мы хотим, чтобы в меню появилась команда, запускающая стандартный Блокнот. Создаем подраздел notepad и сразу можем проверить и убедиться, что в контекстном меню Рабочего стола появилась одноименная команда. Нам даже не пришлось перезагружать компьютер. Естественно, такая команда не очень нас устраивает, и мы хотим задать собственный текст, например, Блокнотик. Для этого редактируем параметр по умолчанию созданного подраздела и записываем для него новое значение, которое мы хотим видеть, например, прописываем слово Блокнотик. Снова проверяем и убеждаемся, что в контекстном меню появилась наша команда.



    Теперь настраиваем другие параметры, чтобы созданная команда реагировала на щелчки мышью. Подраздел может содержать в себе другие вложенные подразделы и различные параметры строкового типа. Сначала рассмотрим параметры. Мы уже знаем, что параметр по умолчанию определяет название команды. Также можно использовать следующие параметры (привожу только часть возможных параметров):
    • MUIVerb – значение данного параметра заменяет собой значение параметра по умолчанию, т.е. мы можем в этом параметре задать имя для команды в меню.
    • Extended – при наличии данного параметра без значения говорит системе о том, что команда должна отображаться только при нажатии клавиши Shift. Вы можете посмотреть на подраздел HKEY_CLASSES_ROOT\Directory\Background\shell\cmd, в котором содержится такой параметр. Поэтому, если держать нажатой клавишу Shift, то в контекстном меню появится команда Открыть окно команд.


    Теперь перейдем к подразделам. Прежде всего, нужно создать подраздел command. Параметр по умолчанию данного подраздела должен содержать в себе команду, которая будет выполняться при выборе соответствующего элемента контекстного меню. В нашем случае, нужно прописать команду notepad.exe.



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

    Включение/выключения эскизов



    Рассмотрим практический пример создания собственной команды в меню Проводника. Если вы предпочитаете просматривать файлы в режиме Значки, то заметили, что, например, значки картинок отображаются в виде эскизов. В настройках папки можно изменить данное поведение и отключить показ эскизов. Но включать или отключать эти настройки очень утомительно. Судите сами – сначала надо нажать на клавишу Alt, чтобы появилась строка меню у Проводника, далее выбираем меню Сервис | Параметры папок…. После этого нужно переключиться на вкладку Вид и поставить или убрать флажок у команды Всегда отображать значки, а не эскизы. Упростим задачу при помощи реестра и небольшого VBS-сценария, который циклически меняет значения параметра IconsOnly в разделе HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced. Создадим новый раздел ToggleThumb в разделе HKEY_CURRENT_USER\Software\Classes\Directory\Background\Shell и присвоим параметру по умолчанию строковое значение Включить/Выключить эскизы. Тем самым мы создали новую команду для контекстного меню папки в Проводнике. Обратите внимание, что теперь мы используем раздел HKEY_CURRENT_USER, чтобы действие примера распространялось только на одного пользователя. Теперь создаем подраздел command и прописываем в параметре по умолчанию строку wscript.exe "%WinDir%\togglethumbs.vbs". Далее нужно создать сценарий, который будет переключать режим показа эскизов.

    Set WshShell = CreateObject("WScript.Shell")
    strValue = "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\IconsOnly"
    strIconsOnly = WshShell.RegRead(strValue)
    If strIconsOnly = 0 Then
    WshShell.RegWrite strValue,1,"REG_DWORD"
    Else
    WshShell.RegWrite strValue,0,"REG_DWORD"
    End If
    WshShell.SendKeys "{F5}"
    


    Сохраните созданный сценарий под именем togglethumbs.vbs и скопируйте его в папку Windows.
    Теперь вы можете открыть Проводники и проверить работу новой команды. Для удобства я сначала выбрал режим Крупные значки, которые отображаются в виде эскизов.

    Отображение файлов в виде эскизов

    Далее я выбрал в контекстном меню пункт Включить/Выключить эскизы и получил следующий результат – вместо эскизов я увидел значки программы Adobe Photoshop, ознакомительную версию которой я поставил несколько дней назад на своем компьютере.

    Отображение файлов в виде значков

    Идею для данного примера я почерпнул со страницы http://www.winhelponline.com/blog/toggle-thumbnail-previews-right-click-menu-windows-vista-windows-7/ и немного модифицировал ее. Автор оригинального примера предлагает для большего удобства воспользоваться готовыми REG-файлами создания (togglethumbs.reg) и удаления (undo.reg) разделов для новой команды, а также готовый сценарий (togglethumbs.vbs). От себя добавлю, что копирование файла сценария в папку Windows, используемое автором идеи – не самый лучший вариант, так как данная папка является защищенной и не нужно засорять ее собственными файлами. Поэтому, если вы будете использовать пример на своем компьютере, то переделайте его таким образом, чтобы файл сценария находился в более доступном для пользователя месте.

    Удаление содержимого папки без удаления самой папки



    Практически аналогично добавляется собственная команда и в контекстное меню папки. Недавно я нашел один пример применения контекстного меню папки в Проводнике — Add Empty Folder Contents to Windows 7 Right Click Context Menu. | The Windows Club.

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

    Для этого добавляем в раздел HKEY_CLASSES_ROOT\Directory\shell подраздел DeleteFolderContent и создаем в нем строковый параметр MUIVerb со строкой Удалить содержимое папки. Далее в разделе DeleteFolderContent создаем подраздел command и в его параметре по умолчанию прописываем строчку:

    cmd /c "cd /d %1 && del /s /f /q *.*"
    


    Все готово и можете пользоваться примером.

    Заключение



    Хочу предупредить, что я рассказал про основные приемы создания команд в контекстном меню Проводника. Реестр — достаточно сложная штука и существуют другие способы работы с контекстном меню.

    Как видите, вы можете самостоятельно настроить контекстное меню Проводника. Все зависит от вашей фантазии. Если вам нужна дополнительная информация о параметрах реестра, то можете скачать электронный справочник Реестр Windows на моем сайте user.alexanderklimov.ru. Кроме того, достигнута предварительная договоренность с одним издательством о выпуске книги по реестру Windows 7. Как говорится, следите за новостями. Кстати, работая над книгой, обнаружил, что очень многие параметры устарели и их пора удалить из справочника. Но, так как число пользователей Windows XP еще велико, то я решил создать некую страничку-отстойник, куда буду сбрасывать старые парамеры.

    P.S. Строго говоря, приемы настройки контекстного меню в Проводнике доступны и в других версиях Windows, в том числе в Windows XP. Но, я уже давно перешел на Windows 7, поэтому публикую данный пост именно в этом блоге.

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 43

      +3
      реестр великая вещь!
        0
        Отлично, на днях обязательно попробую.
          0
          а не подскажите как удалить ненужное из этого меню?
            0
            Аналогично. заходим в раздел HKEY_CLASSES_ROOT\Directory\Background\Shell и удаляем ненужные разделы.
              0
              у меня там пусто
                0
                посмотрите еще в HKCR\Directory\Background\ShellEx\ContextMenuHandler. Но это сложнее для новичка и не так очевидно.
                  0
                  спасибо, получилось)
            0
            Интересная статья, спасибо!!! Завтра собираюсь перейти на windows 7, как раз попробую:-)
            Скажите, а в windows 7 есть обе программы редактора реестра regedit и regedt32? Если да, то какую вы предпочитаете и почему?
              0
              в windows 7 только один regedit ;)
                0
                есть regedit.exe, а если не изменяет память, в Windows XP regedt32.exe стала просто псеводнимом и запускается тот же regedit.
                0
                с удовольствием почитал бы статью как корректно удалить ненужные комманды из контекстного меню
                  0
                  я последний раз удалял ненужные команды лет десять назад на Win98, поэтому большим спецом по корректному удалению себя не считаю. Может есть какие-то подводные камни. Но всегда можно сделать резервную копию раздела и посмотреть что получится. Вероятность, что система упадет после вмешательства в этот раздел слишком мала (имхо).
                  0
                  Спасибо — интересно и видно, что старались )
                  Но. Из стандартного проводника много не выжать (
                  Ттал коммандер это конечно хорошо, но я пользуюсь Directory Opus — попробуйте его. Там есть целый вагон команд для программированию кнопок, меню, статусбаров и тд — будете приятно удивлены свободе действий! Только он платный (

                  Конкретней

                  picture

                  picture

                  picture
                    –1
                    в свое время у меня был старенький комп с маленьким диском. Поэтому я не любил ставить сторонние программы и пользовался тем, что было: блокнот, IE, проводник, Paint ))). И никогда не комплексовал по этому поводу и не переживал, что кто-то использовал более удобные программы типа Notepad++, Firefox, Photoshop, Far, Total Commander. Привычка использовать стандартные программы у меня осталась. и я не так часто использую операции с файлами и папками, чтобы ставить тот же Opus — я знаю о ней.
                    За комментарий спасибо, может кому-то ваша информация покажется интересной.
                      0
                      Прикиньте примерно потерянное время за эти годы, на какие нибудь простые вещи типа поиска определенной по счету строчки в блокноте, где нет номеров строк или просмотр содержимого файла с неизвестным расширением в эксплорере, просто для примера.
                      0
                      Тоже пользуюсь, великая вещь!
                    • UFO just landed and posted this here
                        +3
                        На самом деле, последовательность «enter → ctrl-a → shift-del → enter» будет ещё быстрее.
                        • UFO just landed and posted this here
                            –7
                            Не все привыкли пользоваться клавой.
                              +4
                              а альт у вас на мышке?
                                –3
                                можно просто выделить мышкой область с файлами
                                  +1
                                  если их over 9000, то ctrl-a быстрее, чем выделять все мышкой
                                    0
                                    да и Ctrl+A, помниться мне, выделяет так же и скрытые файлы, в отличие от простого выделения мышью.
                                      0
                                      А вот и нихрена. При использовании Ctrl+A в папке со скрытыми файлами (и при условии что у вас отключен просмотр скрытых файлов) выскочит предупреждение вида: В папке есть скрытые файлы или папки, бла-бла-бла, чтобы выделить их включите их отображение.

                                      P.S. Сейчас проверил в семерке — нет такого диалога. Но в XP точно есть, зуб даю.
                          0
                          Может автор еще подскажет как добавить линки на собственные папки в стандартном диалоге выбора файла/папки? Я про тот диалог, который отображен на скринах 1.7-1.8.bmp
                          Чтобы добавить частоиспользуемые папки в панель слева
                            0
                            По-моему, нужно просто перетащить ваши папки в Проводнике на эту панель, и папки будут отображаться в диалоговых окнах — если я правильно понял ваш вопрос.
                              0
                              То, что надо, даже не надеялся, что это можно сделать с помощью d&d
                            0
                            Единственно что меня напрягает, так это отсутствие нормального названия действия. Вместо этого многие пункты меню записаны в виде PID: {xxxx-xxxxx-xxxxx-xxxxx}.
                            Есть ли возможность посмотреть соответствие PID=действие?
                              0
                              если долго мучиться, что нибудь получится ))). Возможность есть, система ведь как-то смотрит.
                              • UFO just landed and posted this here
                                  0
                                  Это логично, но все же как-то увидеть расшифровку можно?
                                  • UFO just landed and posted this here
                                  +2
                                  HKCR\CLSID\{xxxx-xxxxx-xxxxx-xxxxx}
                                  Это, кстати, называется GUID
                                  0
                                  Вчера узнал где хранятся короткие имена, которые будет понимать консоль (calc, exel, winword...):
                                  HKLMN\Software\Microsoft\Windows\CurrentVersion\App Paths\
                                    0
                                    параметр «Extended» — приятное открытие :) поставил его к редко используемым командам, таким как «Сканировать файл антивирусом» и ещё некоторым, чтоб не захламляли меню при частом использовании
                                      0
                                      У меня возникло два вопроса:

                                      1. Как сделать своё контекстное меню? То есть мы выбираем «Блокнотик» и выпадает подменю (например с «Добавить», «Редактировать»)

                                      2. Как задать свою иконку для добавленного элемента меню?

                                      Меня интересует именно через реестр. Просто я разрабатываю программу и хочу чтобы она встраивался в контестное меню Эксплорера со своим подменю и иконками (пример TortoiseSVN)
                                        0
                                        попробуйте найти запись в реестре вашего TortoiseSVN и сделать также
                                        0
                                        попробуйте найти запись в реестре вашего TortoiseSVN и сделать также
                                          0
                                          Спасибо! Сделал команду «Open shell» — запускает cmd /k «cd /d %L» — командную строку из этой папки.

                                          Меню появляется при правом клике на папку, но не на пустом месте любой папки. Есть ли простая возможность настроить и это меню?
                                            0
                                            Вы невнимательно читали статью. В самом начале говорится о подразделе Background — именно он отвечает, чтобы меню появлялось при клике на пустом месте
                                              0
                                              Статья рекомендует:
                                              > достаточно создать в разделе HKCR\Directory\Background\Shell новый подраздел

                                              Создание подразделов в HKCR/Directory/Shell создает команды в контекстном меню папки (но не меню «пустого места»).

                                              Создание подразделов в HKCR/Directory/Background/shellex, а также свежесозданном HKCR/Directory/Background/shell не приносит результатов.

                                              Это поведение наблюдается на winxp sp2.
                                              На семерке проверил — меню создать удалось.
                                              Возможно, на xp это меню не настраивается (в контекстном меню папки много установленных программ нагадили, а в этом пусто).
                                                0
                                                Это можно сделать в хр
                                                www.roggel.com/NGNeer/BackgroundCMD/

                                                Как именно это делается я не разбирался, но кажется одной правкой реестра дело не обходится

                                          Only users with full accounts can post comments. Log in, please.