Windows 7 Federated Search - How to make it send s

2019-03-21 12:19发布

I am trying to display search results in the windows 7 explorer thru the federated search feature, from a local .net assembly. (not from a web service)

I have found various tutorials, but all of them are for web services. Earlier I thought that it was not possible but then, I came across the StickyNotes federated search connector. The contents of the .OSDX file are:

<?xml version="1.0" encoding="UTF-8"?>
<searchConnectorDescription xmlns="http://schemas.microsoft.com/windows/2009/searchConnector">
  <description>Create short handwritten or text notes.</description>
  <isSearchOnlyItem>true</isSearchOnlyItem>
  <includeInStartMenuScope>true</includeInStartMenuScope>
  <templateInfo>
    <folderType>{982725EE-6F47-479E-B447-812BFA7D2E8F}</folderType>
  </templateInfo>
  <simpleLocation>
    <url>StickyNotes://{S-1-5-21-3431700657-2522803235-1547684158-1000}/notes</url>
    <serialized>MBAAAEAFCAAAAAAAADAAAAAAAYUgAAQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAYKAUAwHAykg1PPWtiyRvmVorPeOnkJkAQEATBAdAkGAjBwaAkHAOBwbAQHAlBwcAoDAvAwLAsHATBQLAEDAtAQNA0CAyAQMA0CAzAANAMDAxAwNAADAwAgNAUDA3AQLAIDA1AgMAIDA4AAMAMDAyAwMAUDAtAQMAUDA0AwNAYDA4AANAEDA1AAOA0CAxAAMAADAwAQfA8CAuBwbAQHAlBwcAAAAAAAAAAAAAAA</serialized>
  </simpleLocation>
</searchConnectorDescription>

This means that it is possible to forward a search query to a local datastore/dll/exe

I would like to use my .net app to provide search results in the same/similar way. Where do I start?

See: Windows 7 Federated Search Provider Implementer’s Guide

My aim is to make a documents library database (sqlite) searchable via the windows explorer and list the files and their meta data from the DB in explorer (files are stored locally).

2条回答
干净又极端
2楼-- · 2019-03-21 12:22

The info on MSDN has been updated.
http://msdn.microsoft.com/en-us/library/dd378288%28v=vs.85%29.aspx

It now lists:

HRESULT GetResults(
  [in]   HWND hwnd,
  [in]   LPCWSTR pszQuery,
  [in]   DWORD dwStartIndex,
  [in]   DWORD dwCount,
  [in]   REFIID riid,
  [out]  void **ppv
);

Parameters

hwnd [in]

Type: HWND
The window handle of the caller.

pszQuery [in]

Type: LPCWSTR
The query as entered by the user. This parameter is equivalent to the OpenSearch {searchTerms} parameter and may be empty.

dwStartIndex [in]

Type: DWORD
The index of the first result being requested. Equivalent to the OpenSearch {startIndex} parameter. See Remarks below.

dwCount [in]

Type: DWORD
The number of results being requested. Equivalent to the OpenSearch {count} parameter.

riid [in]

Type: REFIID
The IID of the interface being requested. Typically IID_IStream.

ppv [out]

Type: void** An interface pointer, of type specified by RIID, to the object containing the results in Atom or RSS format.

At least we know that a valid riid is IID_IStream

The info for that is here: http://msdn.microsoft.com/en-us/library/windows/desktop/aa380034%28v=vs.85%29.aspx

查看更多
一纸荒年 Trace。
3楼-- · 2019-03-21 12:32

This project appears to accomplish this in C#: http://mossph.codeplex.com/

The project implements ISearchProtocol using IContentEnumerator, IFilter and IUrlAccessor. Everything propogates from an implement of a ContentEnumerator class.

查看更多
登录 后发表回答