Регистрация обработчиков расширений оболочки

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

При создании или изменении обработчика расширений оболочки важно уведомлять систему о том, что вы внесли изменения. Для этого вызовите SHChangeNotify, указав событие SHCNE_ASSOCCHANGED . Если не вызвать SHChangeNotify, изменение может быть не распознано до перезагрузки системы.

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

Как и для всех com-объектов, необходимо создать GUID для обработчика с помощью средства, такого как Guidgen.exe, который входит в состав пакета SDK для Windows. Создайте подраздел в HKEY_CLASSES_ROOT\CLSID , имя которого является строковой формой этого GUID. Так как обработчики расширений оболочки являются внутрипроцессными серверами, необходимо также создать подраздел InprocServer32 в этом подразделе GUID со значением (по умолчанию), равным пути к библиотеке DLL обработчика. Используйте модель потоков квартиры. Пример показан далее:

HKEY_CLASSES_ROOT
   CLSID
      {00021500-0000-0000-C000-000000000046}
         InprocServer32
            (Default) = %windir%\System32\Example.dll
            ThreadingModel = Apartment

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

В этом разделе рассматриваются следующие темы:

Имена обработчиков

Чтобы включить обработчик расширений оболочки, создайте подраздел с именем подраздела обработчика (см. ниже) в подразделе ShellExлибо ProgID (для типов файлов), либо имя типа объекта оболочки (для predefined_shell_objects).

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

HKEY_CLASSES_ROOT
   MyProgram.1
      ShellEx
         ContextMenuHandlers

Для следующих обработчиков создайте подраздел под подразделом "Имя подраздела обработчика" с именем строковой версии идентификатора класса (CLSID) расширения оболочки. Под именем подраздела обработчика можно зарегистрировать несколько расширений, создав несколько подразделов.

Обработчик Интерфейс Имя подраздела обработчика
Обработчик поставщика столбцов IColumnProvider ColumnHandlers
Обработчик контекстного меню IContextMenu ContextMenuHandlers
Обработчик copyhook ICopyHook CopyHookHandlers
Обработчик действия перетаскивания IContextMenu DragDropHandlers
Обработчик страницы свойств IShellPropSheetExt PropertySheetHandlers

 

Для следующих обработчиков значением по умолчанию ключа Handler Subkey Name является строковая версия CLSID расширения оболочки. Для этих обработчиков можно зарегистрировать только одно расширение.

Обработчик Интерфейс Имя подраздела обработчика
Обработчик данных Idataobject DataHandler
Обработчик перетаскивания IDropTarget DropHandler
Обработчик значков IExtractIconA/W IconHandler
Обработчик эскизов изображений IThumbnailProvider {E357FCCD-A995-4576-B01F-234630154E96}
Обработчик подсказок IQueryInfo {00021500-0000-0000-C000-0000000000046}
Ссылка на оболочку (ANSI) IShellLinkA {000214EE-0000-0000-C000-000000000046}
Ссылка на оболочку (ЮНИКОД) IShellLinkW {000214F9-0000-0000-C000-0000000000046}
Структурированное хранилище IStorage {0000000B-0000-0000-C000-0000000000046}
Метаданные IPropertySetStorage PropertyHandler
Закрепление в меню "Пуск" IStartMenuPinnedList {a2a9545d-a0c2-42b4-9708-a0b2badd77c8}
Закрепление на панели задач {90AA3A4E-1CBA-4233-B8BB-535773D48449}

 

Подразделы, указанные для добавления в меню "Пуск " и "Закрепить на панели задач " в контекстном меню элемента, требуются только для типов файлов, включающих запись IsShortCut .

Предопределенные объекты оболочки

Оболочка определяет дополнительные объекты в HKEY_CLASSES_ROOT которые можно расширить так же, как и типы файлов. Например, чтобы добавить обработчик страницы свойств для всех файлов, можно зарегистрироваться в подразделе PropertySheetHandlers .

HKEY_CLASSES_ROOT
   *
      shellex
         PropertySheetHandlers

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

Подраздел Описание Возможные обработчики
* Все файлы Контекстное меню, страница свойств, глаголы (см. ниже)
AllFileSystemObjects Все файлы и папки файлов Контекстное меню, страница свойств, глаголы
Папка Все папки Контекстное меню, страница свойств, глаголы
Каталог Папки файлов Контекстное меню, страница свойств, глаголы
Каталог\Фон Фон папки файлов Только контекстное меню
DesktopBackground Фон рабочего стола (Windows 7 и более поздние версии) Контекстное меню, глаголы
Диске Все диски в MyComputer, например "C:\" Контекстное меню, страница свойств, глаголы
Network Вся сеть (в разделе Мои сетевые расположения) Контекстное меню, страница свойств, глаголы
Network\Type\ # Все объекты типа # (см. ниже) Контекстное меню, страница свойств, глаголы
NetShare Все сетевые ресурсы Контекстное меню, страница свойств, глаголы
NetServer Все сетевые серверы Контекстное меню, страница свойств, глаголы
network_provider_name Все объекты, предоставляемые поставщиком сети "network_provider_name" Контекстное меню, страница свойств, глаголы
принтеры; Все принтеры Контекстное меню, страница свойств
AudioCD Аудио компакт-диск в CD-дисководе Только глаголы
DVD DVD-накопитель (Windows 2000) Контекстное меню, страница свойств, глаголы

 

Примечания

  • Чтобы открыть контекстное меню фона файловой папки, щелкните правой кнопкой мыши в папке файлов, но не по содержимому папки.
  • "Verbs" — это специальные команды, зарегистрированные в HKEY_CLASSES_ROOT\ командоболочки подраздела\\.
  • Длятипа\#сети\ "#" — это код типа сетевого поставщика в десятичном формате. Код типа сетевого поставщика — это высокое слово типа сети. Список типов сети приведен в файле заголовка Winnetwk.h (значения WNNC_NET_*). Например, WNNC_NET_SHIVA 0x00330000, поэтому соответствующий подраздел типа будет HKEY_CLASSES_ROOT\Тип\сети\51.
  • "network_provider_name" — это имя поставщика сети, указанное в WNetGetProviderName, с пробелами, преобразованными в символы подчеркивания. Например, если установлен поставщик сетевых сетей Майкрософт, его имя поставщика — "Сеть Microsoft Windows", а соответствующий network_provider_name— Microsoft_Windows_Network.

Пример регистрации обработчика расширений

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

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

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
   CLSID
      {00000000-1111-2222-3333-444444444444}
         InProcServer32
            (Default) = C:\MyDir\MyCommand.dll
            ThreadingModel = Apartment
      {11111111-2222-3333-4444-555555555555}
         InProcServer32
            (Default) = C:\MyDir\MyPropSheet.dll
            ThreadingModel = Apartment
   MyProgram.1
      (Default) = MyProgram Application
      Shellex
         ContextMenuHandler
            MyCommand
               (Default) = {00000000-1111-2222-3333-444444444444}
         PropertySheetHandlers
            MyPropSheet
               (Default) = {11111111-2222-3333-4444-555555555555}

Инициализация обработчиков расширений оболочки