Создание обработчиков поиска
[Эта функция поддерживается только в Windows XP или более ранней версии. Вместо этого используйте поиск Windows.]
Оболочка поддерживает несколько служебных программ поиска, которые позволяют пользователям находить объекты пространства имен, такие как файлы или принтеры. Вы можете создать пользовательскую поисковую систему и сделать ее доступной для пользователей, реализуя и регистрируя обработчик поиска.
Общие процедуры реализации и регистрации обработчика расширений оболочки рассматриваются в разделе "Создание обработчиков расширений оболочки". В этом документе рассматриваются те аспекты реализации, которые относятся к обработчикам поиска.
Как работают обработчики поиска
Пользователи могут выбрать поисковую систему двумя способами. Первый способ — из меню . В системах до Windows 2000 выберите команду "Найти " в меню "Пуск " отображает подменю доступных поисковых систем. При использовании Windows 2000 и более поздних версий команда "Поиск" меню Start переименована в поиск. На следующем рисунке показана кнопка "Поиск " в системе Windows XP.
Пользователи также могут запустить поиск из Windows Обозреватель. В системах, предшествующих Windows 2000, они щелкнули команду "Найти " в меню "Сервис ", чтобы отобразить практически то же меню, что и меню "Пуск ". Однако Windows Обозреватель для Windows 2000 обрабатывает поисковые системы очень иначе. Вместо обработки поисковых систем в виде подменю меню "Сервис " теперь на панели инструментов есть кнопка "Поиск ". При нажатии этой кнопки откроется панель поиска Обозреватель панели поиска. На следующем рисунке показана область поиска "Поиск файлов и папок ".
Существует ряд различий в том, как Windows 2000 и более ранние системы управляют обработчиками поиска, влияющими на реализацию и регистрацию.
Предварительная windows 2000 | Windows 2000 и более поздних версий |
---|---|
Обработчики поиска реализуются как тип обработчика контекстного меню. | Обработчики поиска можно реализовать как обработчики контекстного меню или как документы Динамического HTML (DHTML). |
Обработчики поиска могут быть статическими или динамическими. Статические обработчики загружаются только при выборе пользователем. Динамические обработчики загружаются оболочкой при запуске и не завершаются до тех пор, пока оболочка не завершится. | Обработчики, реализованные как обработчики контекстного меню, могут быть статическими или динамическими. Обработчики, реализованные как документы DHTML, должны быть статическими. |
Обработчики поиска отображаются в подменю "Найти" меню "Пуск" и в подменю "Найти" в меню "Инструменты" для Windows Обозреватель. | Обработчики поиска отображаются только в подменю поиска меню "Пуск". Чтобы сделать настраиваемую область поиска доступной в строке меню Windows Обозреватель, необходимо реализовать ее как объект полосы. Затем он отображается в подменю панели Обозреватель меню "Вид" Обозреватель Windows. |
Регистрация обработчиков поиска
Обработчики поиска регистрируются в подразделе FindExtensionsтипов файлов.
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows
CurrentVersion
Explorer
FindExtensions
С этого момента процедура регистрации зависит от того, должен ли обработчик быть статическим или динамическим. Общие сведения о том, как зарегистрировать обработчики расширений оболочки, см. в разделе "Создание обработчиков расширений оболочки".
Регистрация статического обработчика поиска
Статические обработчики поиска загружаются только при запуске пользователем. Этот подход лучше всего подходит для библиотек DLL, которые являются небольшими и могут быть загружены быстро. Если для реализации обработчика используется DHTML, он должен быть статическим. Чтобы зарегистрировать обработчик статического расширения, создайте вложенный ключ с именем обработчика в подключе FindExtensions. Имя не используется системой, но оно не должно совпадать с другими именами обработчиков поиска в подразделе FindExtensions .
Обработчики поиска на основе контекстного меню
Если обработчик реализован в качестве обработчика контекстного меню, задайте значение по умолчанию подключа имени обработчика идентификатору класса объекта (CLSID). В подразделе имени обработчика создайте подраздел с именем 0 (ноль) и задайте для нее значение по умолчанию, которое будет отображаться в подменю поиска или поиска . Вы можете включить сочетания клавиш обычным образом, выполнив предыдущий символ сочетания клавиш с амперсандом (&>). У вас может быть необязательный маленький значок, отображаемый справа от текста меню, создав подраздел DefaultIcon под ключом 0 . Задайте значение по умолчанию строке, содержащей путь к файлу, содержаму значок, а затем запятой, за которой следует отсчитываемый от нуля индекс значка.
В следующем примере регистрируется обработчик поиска MySearchEngine . Текст меню — "Моя поисковая система", с M, указанным в качестве сочетания клавиш. Значок находится в C:\MyDir\MySearch.dll с индексом 2.
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows
CurrentVersion
Explorer
FindExtensions
Static
MySearchEngine
(Default) = {MySearchEngine CLSID GUID}
0
(Default) = &My Search Engine
DefaultIcon
(Default) = c:\MyDir\MySearch.dll,2
Обработчики поиска на основе DHTML
В Windows 2000 можно также реализовать обработчик поиска в виде документа DHTML. Его имя отображается в подменю поиска меню "Пуск". Когда пользователь выбирает его, он запускает Windows Обозреватель с Обозреватель панелью, открытой для документа поиска. Можно также указать документ DHTML, отображаемый справа от панели Обозреватель. Нет способа запустить другой обработчик из области поиска по умолчанию. Поисковые системы можно запускать непосредственно из Windows Обозреватель, но только в том случае, если они реализованы как объекты группы.
Чтобы зарегистрировать обработчик поиска на основе DHTML, задайте подключ имени обработчика строковую форму CLSID_ShellSearchExt (в настоящее время {169A0691-8DF9-11d1-A1C4-00C04FD75D13}) и создайте следующие подразделы.
- Создайте подключ 0(ноль) под ключом имени обработчика и задайте его значение по умолчанию в тексте меню.
- Чтобы значок отображался рядом с текстом меню, создайте подключ DefaultIcon в 0 и задайте для него значение по умолчанию путь и индекс значка.
- Создайте подраздел SearchGUID в разделе 0. Назначьте GUID документу DHTML и задайте значение SearchGUID по умолчанию в строковой форме. Этот GUID не требуется зарегистрировать в HKEY_CLASSES_ROOT\CLSID.
- Создайте подраздел URL-адреса в разделе SearchGUID. Задайте значение по умолчанию путь к HTML-документу, который будет отображаться в строке Обозреватель.
- Создайте подраздел UrlNavNew в разделе SearchGUID. Задайте значение по умолчанию путь к HTML-документу, который будет отображаться справа от панели Обозреватель.
В следующем примере регистрируется обработчик поиска MySearchEngine , реализованный как документ DHTML. Текст меню — "Моя поисковая система", с M, указанным в качестве сочетания клавиш. Значок находится в C:\MyDir\MySearch.dll с индексом 2. Документ DHTML строки Обозреватель — C:\MyDir\MySearch.htm, а документ, отображаемый справа от Обозреватель панели, — C:\MyDir\MySearchPage.htm.
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows
CurrentVersion
Explorer
FindExtensions
Static
MySearchEngine
(Default) = {169A0691-8DF9-11d1-A1C4-00C04FD75D13}
0
(Default) = &My Search Engine
DefaultIcon
(Default) = c:\MyDir\MySearch.dll,2
SearchGUID
(Default) = {My Search GUID}
Url
(Default) = C:\MyDir\MySearch.htm
UrlNavNew
(Default) = C:\MyDir\MySearchPage.htm
Регистрация динамического обработчика поиска
Если обработчик реализован в качестве обработчика контекстного меню, вы также можете зарегистрировать его в качестве динамического обработчика. В этом случае она будет загружена с помощью оболочки и завершится только после выхода оболочки. Динамические обработчики поиска реагируют гораздо быстрее, чем статические обработчики при запуске пользователем. Этот подход лучше всего подходит, если библиотека DLL обработчика может занять много времени для загрузки или, вероятно, будет вызываться часто.
Динамические обработчики поиска регистрируются в подразделе FindExtensions .
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows
CurrentVersion
Explorer
FindExtensions
Создайте подраздел FindExtensions с именем обработчика и задайте значение по умолчанию для GUID CLSID обработчика. Значки меню не поддерживаются для динамических обработчиков поиска. В следующем примере выполняется регистрация MySearchEngine в качестве динамического обработчика поиска.
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows
CurrentVersion
Explorer
FindExtensions
MySearchEngine
(Default) = {MySearchEngine CLSID GUID}
0
(Default) = &My Search Engine
В отличие от статических обработчиков поиска, текст меню в реестре не указан. При загрузке обработчика оболочка вызывает метод IContextMenu::QueryContextMenu::QueryContextMenu, чтобы добавить элементы в подменю Find или Search.
Реализация обработчиков поиска
Обработчики поиска можно реализовать как обработчики контекстного меню для всех версий Windows. Для Windows 2000 они также могут быть реализованы как документы DHTML.
Общие сведения о реализации обработчиков контекстного меню см. в разделе "Создание обработчиков контекстного меню". Обработчики поиска отличаются от стандартных обработчиков контекстного меню только несколькими способами.
Для статических обработчиков меню создается подменю "Поиск " или "Поиск " из сведений в реестре. Обработчику не нужно добавлять пункт меню, так как обычный обработчик контекстного меню не будет. Оболочка управляет статическими обработчиками меню следующим образом.
- Когда пользователь запускает элемент меню обработчика, оболочка загружает библиотеку DLL обработчика и вызывает IContextMenu::InvokeCommand , чтобы уведомить обработчика о запуске поисковой системы. Методы IShellExtInit::Initialize и IContextMenu::QueryContextMenu не вызываются.
- При вызове IContextMenu::InvokeCommand член lpVerb структуры CMINVOKECOMMANDINFO, передаваемой в этой команде. Слово с низким порядком lpVerb задается числовым эквивалентом имени подраздела команды. Так как этот подраздел обычно называется 0, lpVerb обычно имеет нулевое значение. Затем обработчик должен запустить поисковую систему.
Динамические обработчики поиска реализованы так же, как и обычные обработчики контекстного меню. Основное исключение заключается в том, что при вызове IShellExtInit::Initialize аргументы pidlFolder и lpdobj имеют значение NULL.
Обработчики поиска на основе DHTML реализуются как обычный документ DHTML. Они могут включать любую технологию HTML, DHTML или скриптов, поддерживаемую Windows Internet Обозреватель.