使用搜索协议

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

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

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

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

注意

search: 协议不会取代专有的 search-ms: 协议。 应用程序仍可使用 search-ms: 协议来启动 Window Search Explorer 或静默查询 Windows 搜索索引器。

 

本主题涵盖以下内容:

语法

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

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

该语法以标识协议本身开始 (search:)。 参数/值对是传递给搜索引擎的参数,如下表所示,其中显示了搜索协议语法的所有可能参数。

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

 

Windows Vista SP1 使用 search: 协议

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

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

 

Windows Vista SP1 搜索协议入口点无法利用搜索协议中的所有可能参数。 如果应用程序只需处理来自 Windows Vista SP1 的搜索协议调用,则可使用下表作为最低实施要求的指南。

参数 由 Windows 使用? Windows Vista SP1 在调用搜索时如何使用它:
查询 用户输入的查询文本。
crumb 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"

高级查询语法

默认程序