具有自定义属性的IFilter

时间:2019-02-27 21:10:54

标签: com windows-search ifilter

我正在为我的文件格式开发自定义过滤器。当我使用<propkey.h>之类的PKEY_Search_Contents中的任何系统键时,一切工作正常。

但是现在我需要具有自定义属性才能注册并与Windows Search一起使用。想象一下:

"SELECT * FROM SystemIndex WHERE scope ='file:C:/' AND Publisher.Item.CustomProperty LIKE '%Test%'"

我看到了有关属性处理程序的信息,并且已经过测试。我使用了Windows 7 SDK示例中的RecipePropertyHandler项目。当我搜索此代码时:

// get a property store for the mp3 file
IPropertyStore* store = NULL;
HRESULT hr = SHGetPropertyStoreFromParsingName(L"SomePath",
    NULL, GPS_DEFAULT, __uuidof(IPropertyStore), (void**)&store);

hr = HRESULT_FROM_WIN32(GetLastError());

PROPVARIANT variant;
store->GetValue(PKEY_Microsoft_SampleRecipe_Difficulty, &variant);

//// very important undocumented method
store->Release();
CoUninitialize();

我收到正确答案。

但是我不知道如何将IFilterIPropertyStore结合起来以创建我的自定义属性。为了开始我的IFilter,我使用了Windows 7 SDK Samples中的示例。我正在做类似的事情:

chunkValue.SetTextValue(PKEY_SearchContents, filtered.c_str(),CHUNK_TEXT, 1046, 0, 0, CHUNK_EOS);

我再也找不到链接了,但是我读了msdn的报价,说您不能一起实现IFilterIPropertyStore。是真的吗换句话说,我无法创建自定义属性?

我看到了来自msdn的所有链接,例如linklink2或其他任何链接。 我可以做单独的事情,但我不知道如何将两者结合起来。

任何思想观念如何实施?

编辑

我正在尝试实现PropertyHandler。我的.propdesc文件具有以下内容:

-->
<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://schemas.microsoft.com/windows/2006/propertydescription"
        schemaVersion="1.0">
  <propertyDescriptionList publisher="Microsoft" product="SampleRecipe">
    <propertyDescription name="Microsoft.SampleRecipe.Difficulty" formatID="{1794C9FE-74A9-497f-9C69-B31F03CE7EF9}" propID="100">
      <description>This property indicates the preparation difficulty of a recipe.</description>
      <searchInfo inInvertedIndex="true" isColumn="true" />
      <typeInfo type="String" multipleValues="false" isViewable="true" />
      <labelInfo label="Recipe difficulty" invitationText="Specify recipe difficulty" />
      <displayInfo displayType="Enumerated" >
        <editControl control="DropList"/>
        <enumeratedList>
          <enum value="Easy" text="Easy" />
          <enum value="Medium" text="Medium" />
          <enum value="Hard" text="Hard" />
        </enumeratedList>
      </displayInfo>
    </propertyDescription>
    <propertyDescription name="Microsoft.SampleRecipe.Keywords" formatID="{16D19FCB-7654-48AB-8057-DF8E51CC0755}" propID="100">
      <description>This property indicates the preparation difficulty of a recipe.</description>
      <searchInfo inInvertedIndex="true" isColumn="True"/>
      <typeInfo type="String" multipleValues="true" isViewable="true" />
      <labelInfo label="Recipe Keywords" invitationText="Specify recipe keyword" />
    </propertyDescription>
  </propertyDescriptionList>
</schema>

在Windows属性上:

我从文件中收到所有信息...但是当我尝试使用Windows搜索进行搜索时,例如:

SELECT Microsoft.SampleRecipe.Keywords FROM SystemIndex 

其中directory ='somedirectory'

我收到的所有行都是空的...任何想法为何?

编辑

我可以在PropSchema上看到我的属性:

我可以在WSSQL查询上使用Microsoft.SampleRecipe.DifficultyV2,例如:

SELECT Microsoft.SampleRecipe.KeywordsV2 FROM SystemIndex WHERE directory='C:\users\step\documents\rvffilter\'

但是所有内容都是空的

0 个答案:

没有答案