注册示例 属性 处理程序

Registering Sample Property Handler

所以我从 Windows 7 个 SDK 示例 运行 regsvr32 构建了 RecipePropertyHandler,并注册了我的 PROPDESC 文件。这使我能够在 .recipe 类型的文件上编辑名为 Difficulty 的自定义 属性,在详细信息窗格中有一个三态下拉框,还让我可以选择添加属性 作为资源管理器详细信息视图中的一列。

到目前为止,还不错。但是,我正在尝试按照 this MSDN thread 的说明进行操作,但我看到了一些奇怪的事情。

首先,他们提到的三个注册表项中的 none 正在为我显示。具体来说:

  1. HKLM\Software\Microsoft\Windows\CurrentVersion\PropertySystem\PropertySchema\
  2. HKLM\Software\Microsoft\Windows\CurrentVersion\PropertySystem\PropertyHandlers.食谱
  3. HKLM\Software\Classes\CLSID{50D9450f-2a80-4f08-93b9-2eb526477d1a} [实际上这是来自Vista SDK,看起来CLSID已经改变,但新的也不在注册表中.]

他们在另一个线程上提到了一个 .reg 文件,但我认为它不再那样工作了。 对于它的价值,我确实在 HKEY_CLASSES_ROOT\.recipe 下看到了一个条目。我还可以使用 prop.exe 实用程序查看已安装的 属性,如下所示:

C:\tools>prop.exe schema describe Microsoft.SampleRecipe.Difficulty
Microsoft.SampleRecipe.Difficulty
----------------------------------
Property Key:          {1794C9FE-74A9-497F-9C69-B31F03CE7EF9} 100
Canonical Name:        Microsoft.SampleRecipe.Difficulty
Property Type:         VT_LPWSTR
Display Name:          Recipe difficulty
Edit Invitation:       Specify recipe difficulty
Type Flags:            PDTF_CANGROUPBY | PDTF_CANSTACKBY | PDTF_ISVIEWABLE | PDTF_ISQUERYABLE
View Flags:
Default Column Width:  20
Display Type:          PDDT_ENUMERATED
Column State:          SHCOLSTATE_TYPE_STR
Grouping Range:        PDGR_ENUMERATED
Relative Desc. Type:   PDRDT_GENERAL
Sort Description:      PDSD_A_Z
Sort Desc. Labels:     A on top/Z on top
Aggregation Type:      PDAT_DEFAULT
Condition Type:        PDCOT_STRING
Condition Operation:   COP_WORD_EQUAL
Enumerated Types:      4
  0 PET_DISCRETEVALUE: Easy            VT_LPWSTR/[Easy]
  1 PET_DISCRETEVALUE: Medium          VT_LPWSTR/[Medium]
  2 PET_DISCRETEVALUE: Hard            VT_LPWSTR/[Hard]
  3 PET_DISCRETEVALUE: Really, Really Hard VT_LPWSTR/[ReallyReallyHard]
Search Info Flags:     PDSIF_ISCOLUMN | PDSIF_ISCOLUMNSPARSE
Column Index Type:     PDCIT_ONDISK
Projection String      Microsoft.SampleRecipe.Difficulty
Max Size:              512

无论如何,主要问题是,我是否不能在 Windows 资源管理器搜索 UI 中使用其规范名称或助记名称来查询此 属性?这似乎对我不起作用,如果它甚至被支持,从另一个线程也不清楚。不过,Vista 和 Windows 7 可能会将此信息存储在不同的位置。

但是,我确实注意到至少有一个非自定义 属性 支持使用高级搜索查询语法,即 ie9props.propdesc 中定义的 Microsoft.IE.VisitCount。所以我认为必须有办法做到这一点。当我使用 Advanced Query Syntax 键入 propertyname:value 时,我正在寻找的是资源管理器搜索栏中的蓝色文本。我想如果他们支持在详细信息窗格中自定义编辑 UI,当然如果 属性 是可查询的,它会在资源管理器 UI.

中给我一个小的搜索过滤器

是的,它有效。我不完全确定是什么原因造成的,但现在我至少可以在我的机器上使用它了。我可以使用我的规范名称或助记别名,当我点击冒号字符时,它在资源管理器搜索栏中变为蓝色。

旧线程中提到的注册表位置不是最新的。请参阅 https://msdn.microsoft.com/en-us/library/windows/desktop/bb266532(v=vs.85).aspx#prophandlers__installation 以了解截至 Windows 7.

的正确值