Добавление команд в контекстное меню Компьютера и Корзины (продолжение)

    После публикации статьи на Хабре Добавляем собственные команды в контекстное меню Проводника ко мне периодически стали приходить письма, в которых авторы просили объяснить, почему добавленные команды не отображаются в контекстных меню папки Компьютер или Корзина, хотя некоторые программы умудряются как-то добавить свои команды.

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

    Для начала нужно понять, что, несмотря на определенную схожесть с папками, Компьютер и Корзина являются специальными объектами Windows, обладающими особенными свойствами. На самом деле таких объектов в системе Windows несколько сотен. В реестре Windows есть специальный раздел CLSID, который находится в ветке HKEY_CLASSES_ROOT. Если вы зайдете в этот раздел, то увидите, что он содержит непонятные разделы, состоящие из набора цифр, которые окружены фигурными скобками. Это идентификаторы класса (Class ID или CLSID), которые являются шестадцатибайтным числом. Для простоты можете представлять это число как номер телефона. Как номер телефона соответствуют одному человеку, так и номер CLSID соответствует определенному объекту.

    Перейдем к делу. Итак, чтобы добавить новую команду в контекстное меню значка Компьютер (бывший Мой компьютер), нужно найти его идентификатор и добавить новый подраздел в его разделе shell. Объекту Компьютер соответствует идентификатор {20D04FE0-3AEA-1069-A2D8-08002B30309D}. Таким образом, чтобы добавить свою команду в контекстное меню объекта Компьютер, необходимо создать в разделе HKCR\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell новый раздел (например, Notepad), который и будет отображаться в меню. В созданном разделе создайте подраздел command, в котором пропишите программу для запуска в параметре по умолчанию. В нашем случае это будет строка notepad.exe.

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

    Добавляем команду в реестр

    Проверяем — выбираем объект Компьютер в любом месте (меню кнопки Пуск, значок на Рабочем столе или в Проводнике) и убеждаемся, что в контекстном меню появилась команда Запустить блокнот.

    Новая команда в контекстном меню

    Немного задержимся на контекстном меню Компьютера. Понятно, что если сторонняя программа добавила в контекстное меню Компьютера свою команду, то вы можете ее удалить, зная, где искать эту команду. Но, не переусердствуйте. Например, чтобы удалить команду Управление, совсем не обязательно удалять подраздел Manage. Достаточно воспользоваться параметром NoManageMyComputerVerb в разделе HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer или воспользоваться групповой политикой (подробнее об этом параметре можно узнать в электронном справочнике по реестру Windows. В этом случае вы просто скрываете ненужную команду безопасным способом.

    Также вы можете скрыть пункт меню Свойства из контекстного меню объекта Компьютер при помощи параметра NoPropertiesMyComputer (тоже есть в электронном справочнике).

    Аналогично поступаем и с объектом Корзина. Идентификатором Корзины является число {645FF040-5081-101B-9F08-00AA002F954E}. Прописываем для найденного CLSID новый раздел с подразделом command. Вместо поднадоевшего примера с запуском Блокнота, я прописал команду Пошел на Хабр с запуском Google Chrome на домашнюю страницу Хабрахабра (C:\Users\tehnolog\AppData\Local\Google\Chrome\Application\chrome.exe http://habrahabr.ru).

    Контекстное меню Корзины

    Для полноты картины добавлю, что для скрытия команды Свойства в контекстном меню Корзины используется параметр NoPropertiesRecycleBin.

    На этом тема контекстных меню в Windows не исчерпана. Но, надеюсь, данный материал снимет часть вопросов. Удачи!
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 30

      0
      расскажите, пожалуйста, как делать вложенное меню
        0
        простыми средствами реестра тут не обойтись. здесь уже требуется программирование. есть статья на MSDN — msdn.microsoft.com/en-us/library/aa969384.aspx. к сожалению, я в этом направлении не работал.
          +1
          Впрочем, нет. У меня хорошая новость. В Windows 7 можно создавать вложенные меню. Только что проверил. Взято отсюда msdn.microsoft.com/en-us/library/cc144171(VS.85).aspx
            0
            коварный парсер снова вершит зло
          –1
          Спасибо за статью, очень помогла сделать еще немного удобнее Win7
            –1
            Это оказывается так просто… ) Спасибо.
              0
              Гм, а каким образом добавить в конткестное меню «Рабочего стола» на XP?
              Пробовал чудить вот с этим: HKEY_CLASSES_ROOT\Directory\Background\shellex — нуль эффекта.
              Хочется вынести создание новой папки прямо в контекстное меню, а не в выпадающее «Создать». Реально?
                0
                так в предыдущей статье (ссылка в начале статьи) и рассказывалось, как добавить команду для папок и рабочего стола.
                  0
                  Читал. В статье — примеры действующие конкретно для папок (Эскизы) и действующие при нажатии пкм на папку. Я пробовал создавать в разделе Background подраздел shell и чудить там, пробовал в shellex, пробовал и в HKCU это делать — в конткестном меню рабочего стола всё также только


                  Наверное, я что-то делаю не так. Хотелось бы понять, что именно.
                    0
                    К сожалению, у меня нет XP, чтобы проверить. Возможно там как-то по-другому. Хотя с другой стороны, у вас там есть пункт Панель управления NVIDIA. Найдите эту ветку и сделайте по аналогии — возможно, вы действительно что-то не так делаете.
                      0
                      Жалко. Но всё равно спасибо.
                      А про ветку нвидии — её я первым делом насиловал. Но тоже без результата.
                      Вот так оно там:

                0
                А на вход можно параметром получить что-либо?
                Например, как в линуксовом nautilus путь к текущей директории, или полный путь к файлу, который я выделил в проводнике?
                  0
                  по идее можно. например, есть параметры, где используется запись типа notepad.exe %1, куда и подставляется полный путь к файлу. Лучше об этом почитать в книжках. Я просто не помню тонкостей.
                  –1
                  Кто подскажет как добавить свои пути в стандартные диалоги открытия файла
                  вот сюда

                  Вот там, где «Недавние места», «Раб. Стол», «Библиотеки»
                  ?
                    –2
                    в справочнике есть. лень открывать его и копировать сюда.
                    • UFO just landed and posted this here
                        0
                        нет, в такое диалоговое окно нельзя. Можно перетягивать в другое, где древовидное меню слева. А вот в это окно так просто не перетянуть.
                        • UFO just landed and posted this here
                            0
                            спасибо, то, что надо
                      0
                      Извините, конечно. Статья, как мне кажется, «аля, как поменять кнопку пуск».
                        +1
                        вы хотите, чтобы я написал статью, как запустить адронный коллайдер? но, я не в курсе. извините.
                        +1
                        В винде структура реестра запутанная (из-за совместимости со сарыми версиями), какие-то программы вписаны путями, какие-то через ProgID, где-то строки вписаны в виде system.dll,-2000, в общем все сделано, чтобы враги не разобрались. Адски неудобно. И за масовое использваоние GUID тоже бы руки отрывать.
                          0
                          А будет статья как добавить кнопку на панель инструментов проводника?
                          Давно уже хочется кнопку «добавить в медиатеку itunes»
                            0
                            В проводнике win7 дико не хватает кнопки отключения/включения «области переходов». И очень хотелось бы там около съемных носителей видеть кнопку eject.
                              0
                              что такое область переходов? меню с папками слева?
                                0
                                Ну, в принципе, да. Можно и так сказать…
                                  0
                                  сверху меню Organize/Layout/Navigation pane
                                  правильно я вас понял?
                            0
                            > несмотря на определенную схожесть с папками, Компьютер и Корзина являются специальными объектами Windows

                            Если я правильно помню оф.гайд от MS по написанию документации, Папка — это элемент интерфейса. И Компьютер, и Корзина, и Панель управления — это папки. imho правильнее написать: «несмотря на определенную схожесть с каталогами файловой системы...»
                              0
                              Отличная статья. Спасибо. Это прекрасное дополнение первой статьи, по крайней мере для меня.

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