当前,我的属性处理程序提供的属性可以显示在Windows资源管理器的type列中String。我的目标是通过(显示)类型Icon的属性扩展处理程序,该属性可以作为列添加到Windows资源管理器的详细信息视图中。在此列中,应该为每个文件项目显示一个图标,例如,该图标可以代表几种可能状态中文件的特定状态。
但是,我没有在Windows属性系统的基础上正确地组合创建具有这些特征的属性的必要部分。
我的方法的第一步是在.propdesc文件中为属性指定XML ,然后执行通常的PSRegisterPropertySchema注册过程。这将始终成功运行,并且该属性在Windows属性系统中列出。
<propertyDescription name="myprop.icon" formatID="{c5f47221-1053-4a75-aadc-0bfbac1c3e9c}" propID="444">
<typeInfo type="???" isInnate="true" isViewable="true"/>
<labelInfo label="MyProp-Icon"/>
<displayInfo defaultColumnWidth="25" alignment="Center">
<drawControl control="IconList"/>
</displayInfo>
</propertyDescription>
Run Code Online (Sandbox Code Playgroud)
的存在<drawControl>(drawControl)与control类型的属性"IconList"的内部<displayInfo>标签让我觉得我的想法可能是可行的。
但是如何type在<typeInfo>标签(typeInfo)中设置相应的内容呢?根据概念的不同,control="IconList"它可以是一个整数,作为像图像列表一样的索引。或者它是一个"Buffer","Blob"或者"Stream"表示图像本身?
最后,在GetValue()属性处理程序外壳扩展的方法PROPVARIANT中,必须根据.propdesc文件的属性描述进行初始化:
HRESULT PropertyHandler::GetValue (REFPROPERTYKEY key, PROPVARIANT *pPropVar)
{
HRESULT hr = ERROR_NOT_FOUND;
if (key.pid == 444)
{ …Run Code Online (Sandbox Code Playgroud) 我最近观察到,我的文件夹预览处理程序未在 Windows 10 版本 1709 上实例化。这令人惊讶,因为该处理程序在从 Windows 7 到 Windows 10 版本 1607 运行的系统上都能完美运行。
预览处理程序以标准化方式在ProgID 下注册Directory:
HKEY_CLASSES_ROOT
Directory
shellex
{8895b1c6-b41f-4c1c-a562-0d564250836f}
(Default) = [REG_SZ] {1F176730-9812-47D8-8163-35D7C1CA0FBF}
Run Code Online (Sandbox Code Playgroud)
可以通过监视 Windows 资源管理器的注册表访问来跟踪工作系统和非工作系统之间的差异。当在 1607 系统上请求预览文件夹时,进程监视器会生成预期的输出:
另一方面,在 1709 系统上,该HKEY_CLASSES_ROOT\Directory键下根本没有注册表访问权限。这就是为什么我怀疑不同的行为(不幸的是)与我的处理程序代码没有任何关系,并且对文件夹的预览处理程序支持可能已在最近的 Windows 版本中删除。
我还使用ProgID Folder进行了测试,而不是Directory没有成功,并验证了我的预览处理程序通常会实例化,至少在文件上,通过在AllFileSystemObjects.
有人有在最新 Windows 版本上运行文件夹预览处理程序的经验吗?