4 April 2010

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

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

Вопросы вполне закономерные, и я сам задавался подобными вопросами несколько лет назад, когда изучал реестр 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 не исчерпана. Но, надеюсь, данный материал снимет часть вопросов. Удачи!
Tags: реестр Windows корзина компьютер
Hubs: Development for Windows
+25
13.8k 86
Comments 30
Ads
Top of the day