Основные сведения о расширениях пространства имен оболочки

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

Как работает расширение пространства имен

В фоновом режиме каждая папка, отображаемая Windows Обозреватель, представлена объектом COM, который называется объектом папки. Каждый раз, когда пользователь взаимодействует с папкой или ее содержимым, оболочка взаимодействует со связанным объектом папки через один из нескольких стандартных интерфейсов. Затем объект папки выполняет все необходимые действия для реагирования на действия пользователя, а оболочка обновляет отображение windows Обозреватель.

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

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

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

Один из способов представить такого рода данные пользователю — написать приложение, позволяющее пользователям просматривать различные элементы и взаимодействовать с ними. Однако если данные можно представить в виде иерархии папок или файлов, большая часть функций, которые необходимо реализовать, может быть службами пользовательского интерфейса, которые уже предоставляются Windows Обозреватель. Гораздо более эффективным подходом может быть написание расширения пространства имен и предоставление windows Обозреватель стать графическим интерфейсом пользователя.

Чтобы реализовать расширение пространства имен, данные должны быть упорядочены в виде древовидного пространства имен. Корневой каталог пространства имен представлен в виде виртуальной папки в пространстве имен оболочки. Корневая папка, а также все ее вложенные папки и элементы данных становятся частью пространства имен оболочки, а windows Обозреватель становится вашим пользовательским интерфейсом. Таким образом, вы можете представить свои сведения пользователю привычным и доступным способом с гораздо меньшим объемом программирования пользовательского интерфейса, чем требуется для пользовательского приложения.

Расширение пространства имен состоит из двух основных компонентов:

  • Диспетчер данных
  • Интерфейс между диспетчером данных и Windows Обозреватель

Первый компонент в списке полностью зависит от вас. Вы можете хранить данные и управлять ими любым наиболее эффективным способом. Второй компонент — это код, необходимый для упаковки данных в виде объектов папок и обработки взаимодействия с Windows Обозреватель. Windows Обозреватель затем могут вызывать эти объекты, чтобы пользователи могли просматривать данные и взаимодействовать с ними, как если бы это были коллекции папок и файлов. Объекты папок расширения пространства имен должны взаимодействовать с Обозреватель Windows, как если бы они были обычными папками. Прежде чем пытаться реализовать расширение пространства имен, необходимо сначала понять, как Windows Обозреватель обрабатывает объект папки.

Объект представления системной папки по умолчанию (DefView)

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

Взаимодействие windows Обозреватель с расширением пространства имен

Windows Обозреватель предоставляет пользователям графический интерфейс, который позволяет им выполнять различные задачи, в том числе:

  • Навигация по иерархии пространства имен и просмотр содержимого папок.
  • Управление содержимым пространства имен путем перемещения, удаления и копирования объектов.
  • Получение различных сведений об объектах.
  • Запуск приложений.

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

Иллюстрация, показывающая компоненты пользовательского интерфейса проводника Windows

Когда пользователь отображает папку, принадлежающую расширению пространства имен в Windows Обозреватель, объект folder имеет по крайней мере частичный контроль над содержимым всех пяти областей.

Представление дерева

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

  • Отображение или скрытие следующего уровня в пространстве имен.
  • Копирование, перемещение или удаление папок.
  • Щелкните правой кнопкой мыши папку, чтобы открыть контекстное меню.
  • Выбор папки и просмотр ее содержимого в представлении папок.

Древовидное представление взаимодействует с объектами папок в основном через интерфейс IShellFolder . Например, когда пользователь щелкает знак "плюс" (+) рядом со значком папки, Windows Обозреватель разворачивает экран для отображения вложенных папок папки. Чтобы получить сведения, необходимые для обновления древовидного представления, оболочка выполняет несколько вызовов интерфейса IShellFolder объекта папки:

  • Запрос атрибутов папки.
  • Перечисление содержимого папки.
  • Запрос отображаемых имен для каждой вложенной папки.
  • Запросите значок, который будет отображаться рядом с каждой папкой.

Windows Обозреватель затем обновляет древовидное представление, чтобы отобразить вложенные папки выбранной папки. Если вложенные папки имеют вложенные папки, рядом со значком папки отображается символ "+". Существует ряд более сложных задач, которые пользователь также может выполнять в виде дерева, в том числе:

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

Более подробное описание того, как расширение пространства имен обрабатывает эти действия пользователя, см. в разделе Реализация базовых интерфейсов объектов папки.

Представление папки

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

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

В отличие от древовидного представления, windows Обозреватель не управляет содержимым представления папок напрямую. Представление папок — это область, которую Обозреватель Windows предоставляет объектам папок. За отображение и управление содержимым папки в представлении папок отвечает объект folder. Хотя большинство представлений папок имеют довольно стандартный формат, на самом деле существует несколько ограничений на то, что может отображаться и как. Крайним случаем является интернет-папка, которая является полнофункциональный браузер.

Когда пользователь выбирает папку, принадлежающую вашему расширению пространства имен, вы создаете окно и передаете его дескриптор Windows Обозреватель. Это окно становится дочерним для окна представления папок. Windows Обозреватель предоставляет размеры окна представления папок, но не накладывает ограничений на содержимое дочернего окна. Затем можно использовать дочернее окно для отображения представления папки в папке.

Расширения пространства имен используют один из двух подходов к созданию представления папок:

  • Используйте дочернее окно для размещения элемента управления представлением списка . Этот элемент управления позволяет отображать содержимое папки практически так же, как классическое представление Windows Обозреватель.
  • Используйте дочернее окно для размещения элемента управления WebBrowser и используйте динамический HTML-документ (DHTML) для отображения содержимого папки.

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

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

По умолчанию Windows Обозреватель поддерживает стандартный набор кнопок и пунктов меню, таких как Копировать и Свойства. Расширение пространства имен может настроить строку меню и панели инструментов, удалив стандартные средства и добавив пользовательские средства. При инициализации объекта представления папки Windows Обозреватель передает указатель на интерфейс IShellBrowser. Этот интерфейс поддерживает несколько методов, которые можно вызвать для настройки строки меню и панели инструментов. Когда пользователь выбирает один из настраиваемых кнопок меню или панели инструментов, Windows Обозреватель перенаправит WM_COMMAND сообщения для настраиваемых элементов меню и панели инструментов в процедуру окна дочернего окна.

Строка состояния

В строке состояния Windows Обозреватель отображаются сведения о выбранном объекте. Расширение пространства имен может использовать строку состояния для отображения сведений о состоянии, таких как текстовая строка. Вы можете настроить строку состояния, вызвав IShellBrowser.