Самоучитель по Delphi 7 для профессионалов



              

Добавление пунктов в системное контекстное меню



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

Когда пользователь щелкает правой кнопкой мыши на любом объекте в пространстве имен, система создает контекстное меню из двух частей: стандартного меню для объектов данного типа и пунктов меню, добавляемых зарегистрированными обработчиками. Зарегистрированные обработчики — это СОМ-серверы, запускаемые в адресном пространстве процесса (in-process servers) и реализованные в виде динамических библиотек.

Ваш СОМ-объект, который расширяет системное контекстное меню, должен поддерживать как минимум два интерфейса — ishellExtinit и IContextMenu. существует и два новых интерфейса — IContextMenu2 и icontextMenuS, но они вносят в логику работы контекстных меню лишь небольшие дополнения и здесь рассмотрены не будут. Интерфейс ishellExtinit отвечает за инициализацию меню, а интерфейс IContextMenu — за выполнение основных функций.

Методы интерфейса IContextMenu приведены в табл. 31.3.

Таблица 31.3. Методы интерфейса IContextMenu

Метод

Описание

function QueryContextMenu (Menu: HMENU; indexMenu, idCmdFirst, idCmdLast, uFlags: UINT) : HResult; stdcall;

Добавляет пункт к системному контекстному меню

function InvokeCommand(var- Ipici: TCMInvokeCommandlnfo): HResult; stdcall;

Осуществляет вызов обработчика

function GetCommandString (idCmd, uType: UINT; pwReserved: POINT; PszName: LPSTR; cchMax: UINT) : HResult; stdcall;

Возвращает описание добавленного пункта меню (подсказку или полное название)

Рассмотрим их подробнее. Параметры метода QueryContextMenu означают следующее:

  •  Menu — дескриптор системного меню;
  • IndexMenu — позиция в меню, в которую следует вставить пункт (пункты);
  •  IdCmdFirst,IdCmdLast — диапазон допустимых значений для идентификаторов вставляемых пунктов меню;



  • Содержание  Назад  Вперед