Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Секреты Windows: статьи о реестре, rundll32.exe, программах: Настройка контекстного меню рабочего стола и проводника


На заметку: Контекстное меню отображаться не будет, если параметру REG_DWORD типа NoViewContextMenu присвоено значение 1. Данный параметр расположен в ветви HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer.

Хранение информации о контекстном меню в реестре

Информация о контекстном меню рабочего стола хранится в ветви реестра HKCR\Directory\Background. По умолчанию в контекстное меню рабочего стола входят следующие интересные для нас команды.

Создать. Позволяет быстро создавать файлы с различными расширениями и свойствами.

Открыть окно команд. Данная команда появится только в том случае, если при отображении контекстного меню вы зажмете клавишу Shift. Она позволяет запустить командный процессор cmd.exe с уже открытым в нем каталогом %userprofile%\Desktop (или любым другим, если вы воспользовались соответствующей командой не контекстного меню рабочего стола, а проводника).

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

Список Создать контекстного меню рабочего стола

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

Данный список является действительно интересной возможностью операционной системы Windows. Однако посмотрите на его содержимое (см. рис. 1) — могу поспорить, что вы регулярно пользуетесь лишь возможностью создания 1-3 файлов различных расширений из всего разнообразия этого списка.

Рисунок 1

Удаление элементов списка

Примечание: Всегда, когда вам предлагают удалить какой-то подраздел реестра - не слушайтесь. Лучше всего вместо удаления просто переименовать соответствующий подраздел - скорее всего, в будущем он вам еще пригодится.

В общем, с содержимым данного списка пора что-то делать. И, как собственно и всегда, к нам на помощь спешит стандартный редактор реестра операционной системы Windows. С помощью реестра из списка Создать можно выборочно удалить элементы, которыми вы никогда не пользовались. Для этого нужно удалить подраздел ShellNew из ветви реестра вида HKCR\"неугодное расширение файла".

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

  • Briefcase. Определяет элемент Портфель списка Создать.
  • .bmp. Определяет элемент Точечный рисунок списка Создать.
  • .contact. Определяет элемент Контакт списка Создать. Данный элемент позволяет создать контакт в новой адресной книге почтового клиента Windows Mail (адресная книга хранится в каталоге %userprofile%\Contacts).
  • .zip. Определяет элемент Сжатая папка списка Создать. Для файлов данного расширения нужно удалить раздел из ветви реестра HKCR\.zip\CompressedFolder.
  • .jnt. Определяет элемент Документ Журнала списка Создать. Для файлов данного расширения нужно удалить раздел из ветви реестра HKCR\.jnt\jntfile.
  • .lnk. Определяет элемент Ярлык списка Создать.
  • Folder. Определяет элемент Папка списка Создать. Этот элемент меню лучше оставить :-)

Например, чтобы удалить из списка Создать элемент Точечный рисунок, нужно удалить раздел ShellNew из ветви реестра HKCR\.bmp.

Удаление элементов списка для папок и дисков

Нововведением операционной системы Windows Vista является возможность использования разного списка элементов меню Создать для папок компьютера, разделов диска и рабочего стола.

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

Например, чтобы определить, что для каталога или раздела диска должны отображаться только элементы списка Создать, которые позволяют создавать текстовый документ или документ Word, достаточно данному параметру присвоить значение .txt;.doc. Учтите только, что в качестве значения данного параметра можно указывать лишь те из расширений, которые отображаются в списке Создать контекстного меню рабочего стола.

Параметр NewMenuAllowedTypes можно использовать в следующих ветвях реестра.

HKCR\Drive. В этом случае значение параметра определяет список расширений, файлы которых можно создать при помощи списка Создать контекстного меню корневого каталога раздела диска (например, при помощи контекстного меню каталога c:\).

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

В начало

Редактирование элементов списка Создать

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

Для создания нового элемента списка достаточно создать подраздел ShellNew в каталоге HKCR\"расширение файла". После этого в подразделе ShellNew нужно создать один из описанных ниже параметров строкового типа (ниже описаны не все возможные параметры).

  • Command. Позволяет указать команду, которая будет выполняться при выборе данного элемента списка. Например, данный параметр используется элементом Контакт.
  • FileName. Позволяет указать путь к файлу, который будет использоваться в качестве шаблона при создании нового файла.
  • NullFile. Создать пустой файл с соответствующим расширением.

Также подраздел ShellNew может содержать в себе и другие параметры строкового типа, которые не относятся к способу работы элемента меню Создать. Например, к таким параметрам относятся следующие.

  • IconPath. Данный параметр определяет путь к значку, который будет отображаться в списке Создать вместо стандартного значка приложения, ассоциированного с файлом. Если вы присвоите данному параметру значение shell32.dll,51, то напротив соответствующего элемента списка Создать рисунок отображаться не будет.
  • MenuText. Данный параметр определяет название библиотеки и идентификатор ресурса, который будет заменять собой стандартное название соответствующего элемента в меню Создать.

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

  • NoExtension. Присутствие данного параметра в разделе реестра приведет к тому, что созданный файл не будет иметь расширения.
  • DontRename. По умолчанию имя созданного файла выделяется для того, чтобы вы могли изменить его с клавиатуры. Если же данный параметр будет присутствовать в разделе реестра, то имя созданного файла автоматически выделяться не будет.

Например, на рисунке 2 можно увидеть результат удаления ненужных элементов списка Создать, а также удаление рисунков некоторых несущественных для меня элементов списка.

Рисунок 2

Перемещение списка Создать

Существует еще одна спорная и не интересная возможность — удаление линии, отображаемой над списком Создать. Для этого достаточно присвоить параметру REG_DWORD типа flags, расположенному в ветви реестра HKCR\CLSID\{D969A300-E7FF-11d0-A93B-00A0C90F2719}, значение 0xffffffff. Вот только автор статьи не гарантирует, что после этого с вашей операционной системой все будет в порядке, потому что он совсем не представляет, зачем нужен параметр flags.

В качестве примера посмотрите на рисунок 3.

Рисунок 3

Удаление списка Создать

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

Для этого достаточно удалить из ветви реестра HKCR\Directory\Background\shellex\ContextMenuHandlers раздел New (если такого раздела не существует, поищите раздел с именем {D969A300-E7FF-11d0-A93B-00A0C90F2719}, или раздел, параметр (по умолчанию) которого будет содержать значение {D969A300-E7FF-11d0-A93B-00A0C90F2719}).

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

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

Добавление обычных команд

Данная возможность является нововведением операционной системы Windows Vista — несмотря на то, что теоретически данная возможность поддерживалась и в предыдущих версиях Windows, практически из ее использования ничего не получалось.

Сведения о контекстном меню рабочего стола и проводника расположены в ветви реестра HKCR\Directory\Background\Shell. Данная ветвь определяет стандартные команды контекстного меню рабочего стола и проводника, при помощи которых можно вызывать различные программы и команды rundll32.exe.

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

  • (по умолчанию). Значение данного параметра определяет название команды, отображаемой в контекстном меню рабочего стола. При этом если значение параметра (по умолчанию) соответствующего дочернего подраздела пусто, название команды, отображаемой в контекстном меню, определяется названием самого дочернего подраздела.
  • LegacyDisable. Присутствие данного параметра в дочернем подразделе запрещает отображение в контекстном меню создаваемой данным дочерним подразделом команды.
  • ProgrammaticAccessOnly. Присутствие данного параметра также запрещает отображение в контекстном меню создаваемой дочерним подразделом команды, разрешая только программный доступ к данной команде.
  • MUIVerb. Значение данного параметра заменяет собой значение параметра (по умолчанию).
  • NoWorkingDirectory. Присутствие данного параметра говорит о том, что при работе программы (если команда контекстного меню запускает программу) не нужно указание рабочего каталога программы.
  • Extended. Если данный параметр присутствует в дочернем подразделе, тогда команда, определяемая при помощи данного подраздела, будет отображаться в контекстном меню только при нажатии клавиши Shift. Например, взгляните на дочерний подраздел cmd, который определяет команду контекстного меню Открыть окно команд.

Дочерний подраздел, определяющий команду контекстного меню рабочего стола, должен содержать в себе подраздел command. Именно параметр (по умолчанию) данного подраздела содержит в себе команду, которая будет выполняться при выборе соответствующего элемента контекстного меню.

В начало

Добавление команд ActiveX

Еще один способ создания команд контекстного меню рабочего стола основан на использовании ActiveX-объектов. В контексте данной статьи мы не будем описывать само понятие и назначение ActiveX-объектов — просто примем как данность то, что они существуют.

Сведения о командах контекстного меню, основанных на ActiveX-объектах, хранятся в ветви реестра HKCR\Directory\Background\ShellEx\ContextMenuHandler. В данной статье мы уже встречались с этой ветвью реестра, ведь ранее рассмотренный нами список Создать основан именно на ActiveX-объекте.

Итак, чтобы создать команду контекстного меню рабочего стола при помощи раздела ContextMenuHandler, нужно в данном разделе создать подраздел, названный в честь CLSID-номера ActiveX-объекта.

Существует несколько десятков стандартных ActiveX-объектов, которые позволяют добавлять свои команды к контекстному меню, однако лишь некоторые из этих ActiveX-объектов добавляют действительно интересные команды.

Кроме того, существует еще одно ограничение, которое накладывается на команды контекстного меню, добавляемые ActiveX-объектами — многие из этих команд конфликтуют друг с другом. Например, ниже описаны CLSID-номера наиболее интересных стандартных ActiveX-объектов, которые конфликтуют друг с другом. То есть, вы можете добавить к контекстному меню только один из этих ActiveX-объектов. Это как в фильме "Горец" — должен остаться только один.

  • {2559a1f0-21d7-11d4-bdaf-00c04f60b9f0}. Добавляет к контекстному меню рабочего стола и проводника команду Поиск.
  • {2559a1f1-21d7-11d4-bdaf-00c04f60b9f0}. Добавляет к контекстному меню рабочего стола и проводника команду Справка и поддержка.
  • {3080F90E-D7AD-11D9-BD98-0000947B0257}. Добавляет к контекстному меню команду Переключение окон, с помощью которой можно вызвать диалог Flip3D.
  • {2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}. Добавляет к контекстному меню рабочего стола и проводника команду Выполнить.

Также существует несколько команд, которые не конфликтуют друг с другом.

  • {645FF040-5081-101B-9F08-00AA002F954E}. Добавляет к контекстному меню рабочего стола и проводника команду Очистить корзину.
  • {32714800-2E5F-11d0-8B85-00AA0044F941}. Добавляет к контекстному меню команду Find People, с помощью которой можно выполнить поиск в адресной книге почтового клиента Windows Mail.

В качестве примера еще раз посмотрите на представленный выше рисунок 3. Уверен, что на этот раз вы точно заметите на нем две новые команды: Выполнить и Find People.

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

REGEDIT4

[HKEY_CLASSES_ROOT\Directory\Background\shell\notepad]
"Extended"=""
 ="Открыть Блокнот"

[HKEY_CLASSES_ROOT\Directory\Background\shell\notepad\command]
 ="notepad.exe"

[HKEY_CLASSES_ROOT\Directory\Background\shell\devmgmt.msc\command]
 ="rundll32.exe devmgr.dll, DeviceManager_Execute"

Как можно заметить из листинга, первая добавляемая команда запускает программу Блокнот, а вторая выполняет команду rundll32.exe, которая запускает оснастку Диспетчер устройств.

А сейчас давайте рассмотрим еще один пример — reg-файл, с помощью которого можно добавить к контекстному меню команды Выполнить и Find People.

REGEDIT4

[HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}]

[HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\{32714800-2E5F-11d0-8B85-00AA0044F941}]
Оригинал статьи: http://www.onestyle.com.ua/txt.php?u=4

В избранное