Главная » Delphi » Расширения оболочки

0

Для получения предельной расширяемости в оболочке Windows предусмотрены средства, позволяющие создать  код, который выполняется в рамках  процесса самой оболочки и в ее пространстве имен. (shell extensions) реализуются в виде   внутренних  серверов  COM,   которые  создаются  и   используются  оболочкой Windows.

НА ЗАМЕТКУ

Поскольку расширения оболочки являются серверами COM, более подробная инфор-

мация о них приведена в главе 15, “Разработка приложений COM”.

Существует  несколько типов  расширений оболочки, связанных с различными  ас пектами ее деятельности. Любое расширение оболочки (другое название — обработчик (handler)) должно  реализовывать по крайней мере  один  интерфейс COM. Оболочка поддерживает следующие типы расширений.

•   Обработчик копирования (copy  hook  handler) реализуют интерфейс ICopy- Hook. Эти расширения позволяют получать  уведомления о копировании, пере мещении, удалении  или переименовании папок,  а также  предотвращать вы полнение всех этих операций.

•   Обработчик контекстного меню (context menu handler) реализует интерфей сы  IContextMenu и  IShellExtInit. Эти  расширения позволяют добавлять команды в контекстное меню определенного файлового объекта оболочки.

•   Обработчик перетаскивания (drag and drop handler) также  реализуют интер фейсы IContextMenu и IShellExtInit. Эти  расширения практически экви валентны реализации обработчиков контекстного меню,  за исключением того, что  они  вызываются в том случае,  когда  пользователь перетаскивает объект в новое  место.•   Обработчик пиктограмм (icon  handler) реализует интерфейсы IExtractIcon и IPersistFile. Эти  обработчики позволяют присваивать пиктограммы раз личным экземплярам файлового объекта одного  типа.

•   Обработчик вкладок (property sheet  handler) реализует интерфейсы IShell- PropSheetExt и IShellExtInit. Они  позволяют добавлять вкладки  к диало говым окнам свойств, ассоциированным с данным  типом файла.

•   Обработчик наложения (drop target  handler) реализует интерфейсы IDrop- Target и  IPersistFile. Эти  расширения  позволяют определить действия оболочки при перетаскивании и опускании одного  объекта оболочки на другой.

•   Обработчик объектов данных  (data  object  handler) реализует интерфейсы IDa- taObject и IPersistFile. Эти расширения предоставляют объекты данных, ко торые используются при перетаскивании с помощью мыши, копировании (команда Copy) и вставке (команда Paste) файлов.Отладка расширений оболочки

Прежде чем углубляться в детали создания расширений оболочки, остановимся на теме их отладки. Поскольку расширения оболочки выполняются в пределах собствен- ного процесса оболочки Windows, возникает закономерный вопрос: “Как же “внедриться” (hook into) в оболочку для отладки ее расширений?”.

Решение проблемы основано на том, что оболочка представляет собой исполняемый файл (не слишком отличающийся от любого другого приложения), который называется explorer.exe. Как и любой другой исполняемый файл, это приложение имеет свойства.

Но именно здесь и заключается его отличие от других исполняемых файлов: оболочку вызывает лишь первый экземпляр explorer.exe. Все последующие экземпляры просто вызывают дополнительные окна Explorer (Проводник).

Используя один малоизвестный трюк, можно закрыть оболочку, не выходя из Windows. Для отладки расширений в среде Delphi можно воспользоваться следующим алгорит- мом.

1.  Выбрав в меню Run пункт Parameter, сделайте файл explorer.exe основным приложением для расширения оболочки. Убедитесь, что задан полный путь к фай- лу (например c:\windows\explorer.exe).

2.  В меню кнопки Start (Пуск) оболочки Windows выберите пункт Shut Down (Завершение работы). При этом откроется соответствующее диалоговое окно.

3.  В диалоговом окне Shut Down Windows (Завершение работы Windows) щелкните на кнопке    No    (Отмена),    удерживая    при    этом    нажатой    комбинацию    клавиш

<Ctrl+Alt+Shift>. Оболочка закроется, но среда Windows продолжит работу.

4. Используя комбинацию клавиш <Alt+Tab>, переключитесь в Delphi и запустите расширение оболочки. При этом под управлением отладчика Delphi будет вызвана новая копия оболочки. Теперь можно установить в нужных местах программы точки останова и отлаживать расширение оболочки как обычное приложение.

5.  Если необходимо выйти из Windows, эта задача вполне осуществима и без исполь- зования сервиса оболочки: с помощью комбинации клавиш <Ctrl+Esc> вызовите меню Tasks (Задачи) и выберите в нем пункты Windows и Shut Down.

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

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии