如何使用.NET或Windows API在Windows资源管理器中更改特定文件夹中的查看列? (Windows 7及更高版本)

问题描述:

在Windows资源管理器中浏览文件夹时,我可以使用用户界面向我的视图添加其他列,这些列在浏览文件夹时通常不存在,例如“文件扩展名”或“语言”。在Windows 10中,通过单击“查看”选项卡,单击“添加列”,单击“选择列...”,然后选择所需的列并单击“确定”来执行此操作。如何使用.NET或Windows API在Windows资源管理器中更改特定文件夹中的查看列? (Windows 7及更高版本)

我想要做的是以编程方式执行此操作,理想情况下将列表中的任何列添加到所选目录,并希望使用元数据填充该列。我正在广泛研究可以实现此目标的方法,如Column Handler shell extension,但在XP之后对IColumnHandler的支持已经被删除,并且无法正常工作。

从那里,唯一可能的选择是在Windows API中使用属性处理程序,并直接从注册表读取值。但是,我不确定如何去做这件事。我曾尝试在网上找到一些关于如何执行此操作的示例,并且导致我到处都是死胡同。我知道这一定很难,但我确信有人设法使其工作。

有没有人有任何关于如何在Windows API中使用属性处理程序将列添加到Windows资源管理器文件夹中的视图的示例或指导?我有其他选择吗?任何反馈意见。

在shell视图中,您可以通过调用具有PROPERTYKEY结构数组的IColumnManager :: SetColumns来选择列。

假设您有Windows资源管理器窗口的IShellBrowser接口,调用GetActiveShellView以获取shell视图,然后查询IColumnManager的视图对象(C#中的强制转换)。