使用搜索协议

search:application 协议是一种可扩展的约定,用于在 Windows Vista 上使用 Service Pack 1 (SP1) 及更高版本调用桌面搜索应用程序。 该协议是在 Windows Vista SP1 中创建的,为 Windows 提供了一种确定和调用默认桌面搜索应用程序的方法。

协议语法提供了许多可用于执行常见桌面搜索的参数,例如用户输入的搜索词或开始搜索的位置。 当用户从两个可用的搜索入口点之一 (“开始 ”菜单或 Windows 资源管理器) 进行搜索时,操作系统使用搜索协议启动默认桌面搜索应用程序。 为此,它将用户输入的搜索词添加到标准搜索协议语法,并将该信息传递给注册为默认搜索应用程序的应用程序。

如果未安装其他桌面搜索应用程序,则输入到这些入口点的搜索将启动 Windows 搜索资源管理器。 但是,第三方开发人员可以创建、安装和注册其应用程序来处理搜索协议并成为默认搜索应用程序。 此类应用程序需要支持搜索协议语法,并使用 默认程序 功能进行注册,以确保使用 Windows 获得无缝体验。

如果开发的应用程序旨在使用或构建特定的桌面搜索应用程序,则不应完全依赖于 search: 协议。 由于许多应用程序可能拥有 search: 协议,因此不能保证目标桌面搜索应用程序在任何给定时间拥有它。 相反,应使用由该目标桌面搜索应用程序定义的专用搜索协议。 这意味着,旨在作为第三方应用程序的平台的桌面搜索应用程序应同时支持 搜索协议 及其自己的专有搜索协议。

注意

search: 协议不替换专有 search-ms: 协议。 应用程序仍然可以使用 search-ms: 协议来启动窗口搜索资源管理器或以无提示方式查询 Windows 搜索索引器。

 

本主题涵盖以下内容:

语法

搜索协议使用以下标准 URL 编码语法:

search:parameter=value[&parameter=value]&

语法首先在搜索 (标识协议本身 ) 。 参数/值对是传递给搜索引擎的参数,如下表所述,其中显示了搜索协议语法的所有可能参数。

参数 说明
query URL 编码的文本 用户输入的查询文本。
inputlocale LCID) (任何有效的语言代码标识符 标识查询的输入语言的 LCID。
keywordlocale 任何有效的 LCID 标识索引器国际版本语言的 LCID。 默认值为 1033 (en-us) 。
AQS 语句 此参数限制要搜索的范围。 在 Windows Vista 中,搜索协议支持完整的 AQS 以及参数的特殊实现 location 。 在 Windows XP 中,搜索协议还支持完整的 AQS,但 和 store的特殊kind实现除外。
语法 NQS、AQS (不区分大小写) 用于搜索索引的查询语法:自然查询语法或高级查询语法 (AQS) 。 AQS 是默认的,始终假定已分析和支持 AQS。
stackedby 属性系统中的任何有效属性 一个 属性,该属性指定要作为结果的堆栈依据的列。
subquery 保存的搜索文件的完全指定路径 (*.search-ms) 子查询的结果用作查询的源。 也就是说,将针对子查询的结果搜索查询词。
displayname URL 编码的字符串 当前搜索的名称。

 

Windows Vista SP1 使用搜索:协议

具有 SP1 的 Windows Vista 具有多个入口点,从中调用 search: 协议。 下面概述了这些入口点以及与每个入口点关联的通用语法。

搜索协议入口点 位置 调用的查询
随处搜索 “开始 ”菜单 search:query=<搜索词>
随处搜索 Windows 资源管理器 search:query=<Search Term>&crumb=location:<LOCATION>
Windows 徽标键+F 任何位置 搜索:
Ctrl+F Windows 资源管理器 search:query=<Search Term>&crumb=location:<LOCATION>
F3 “开始 ”菜单 搜索:
F3 Windows 资源管理器 search:query=<Search Term>&crumb=location:<LOCATION>

 

具有 SP1 搜索协议入口点的 Windows Vista 不会利用搜索协议中的所有可能参数。 仅涉及使用 SP1 处理来自 Windows Vista 的搜索协议调用的应用程序可以使用下表作为最低实现所需实现的指南。

参数 由 Windows 使用? Windows Vista SP1 在调用搜索时如何使用它:
query 用户输入的查询文本。
crumb 使用 location 参数指定查询来自何处。
subquery Subquery 参数的结果用作要搜索的项的范围。 如果用户使用 .search-ms 文件进行搜索,然后从该搜索中调用默认桌面搜索应用程序,则通常会使用此方法。
inputlocale 当前未使用。
keywordlocale 当前未使用。
语法 当前未使用。
stackedby 当前未使用。
displayname 当前未使用。

 

示例

如果用户在 “开始 ”菜单中输入“Microsoft”并单击“ 随处搜索”,则会进行生成的搜索协议调用:

search:query=microsoft&

如果用户在 C:\MyFolder 中的 Windows 资源管理器中输入“Seattle”,然后单击“ 搜索所有位置”,则会使用“:”和“\”的转义字符进行以下调用:

search:query=seattle&crumb=location:C%3A%5CMyFolder

注册处理协议的应用程序

由于多个应用程序可以争用搜索协议,因此应在安装期间使用 默认程序 功能注册应用程序,使用户能够更轻松地配置默认值。 除了通常在 Windows XP 下执行安装过程外,基于 Windows Vista 的应用程序还必须注册“默认程序”功能,以便应用程序和用户能够无缝配置默认值。

在用户的计算机上安装必要的二进制文件后,安装例程应完成以下常规任务:

  1. 将 ProgID 写入 HKEY_LOCAL_MACHINE,如下所述。 请注意,应用程序必须为搜索协议创建特定于应用程序的 ProgID。
  2. 声明计算机级搜索协议关联。
  3. 将应用程序注册到 默认程序,如 注册应用程序以使用默认程序中所述,作为搜索协议的竞争者。

注册表项

下面是虚构桌面搜索应用程序 Contoso 搜索所需的注册表项的示例。

HKEY_LOCAL_MACHINE
   SOFTWARE
      Classes
         contoso-search
            URL Protocol = ""
HKEY_LOCAL_MACHINE
   SOFTWARE
      Classes
         contoso-search
            DefaultIcon
               (Default) = %ProgramFiles%\Contoso\Search\contososearch.exe,-7
HKEY_LOCAL_MACHINE
   SOFTWARE
      Classes
         contoso-search
            shell
               open
                  command
                     (Default) = %ProgramFiles%\Contoso\Search\contososearch.exe %1
HKEY_LOCAL_MACHINE
   SOFTWARE
      RegisteredApplications
         Contoso Search = "Software\\Contoso\\Search\\Capabilities"
HKEY_LOCAL_MACHINE
   SOFTWARE
      Contoso
         Search
            Capabilities
               ApplicationName = "Contoso Search Test App"
               ApplicationDescription = "Contoso search is a great new desktop search application"
HKEY_LOCAL_MACHINE
   SOFTWARE
      Contoso
         Search
            Capabilities
               UrlAssociations
                  search = "contoso-search"

高级查询语法

默认程序