在 Windows 8 上以编程方式对文件夹进行排序

Programmatically sort folders on Windows 8

提问人:Wes 提问时间:7/7/2015 最后编辑:Wes 更新时间:7/15/2015 访问量:547

问:

Windows 8 似乎不会在单个文件夹上保留排序顺序。我猜当资源管理器.exe终止时(例如重新启动时),这些首选项会被丢弃?打败我,我所知道的是一段时间(比如几天)后,这些偏好会完全消失。

有没有办法在 Windows 资源管理器中以编程方式复制文件夹排序(选择上下文菜单中的“排序依据”选项之一)?

这样,假设我在 Windows UI 中打开了一个文件夹。假设文件夹当前设置为按“名称”排序,并且在运行按大小排序的程序后,我再次检查Windows资源管理器中的排序顺序,现在显示“大小”?

我有一个特定的大文件夹结构,我希望它的所有文件夹及其子文件夹都按大小永久排序。因此,我想在查看它们之前运行此程序,而不必先单独手动重新排序它们。谢谢!

Windows-8.1 Windows 资源管理器

评论

0赞 Wes 7/12/2015
对我来说无关紧要。
0赞 Norbert Willhelm 7/12/2015
我猜这个问题属于超级用户。
2赞 Wes 7/12/2015
答案很可能是编程答案,我想很可能是。

答:

8赞 Sheng Jiang 蒋晟 7/12/2015 #1

排序顺序属于视图,而不是文件夹。您可以在同一文件夹上打开两个 Windows 资源管理器窗口,每个窗口都有不同的排序顺序。

若要在 Windows 资源管理器导航到特定文件夹时强制排序顺序,请首先将 DShellWindowsEvents::WindowRegistered 事件挂钩到 shellwindows 对象上,然后在每次触发 WindowRegistered 事件时,枚举 shell 窗口列表,并与现有枚举进行比较以查找新的 Windows 资源管理器实例。使用新实例后,挂接该实例的 DWebBrowserEvents2::D ocumentComplete 事件以侦听其导航。

导航完成后,DocumentComplete 事件将为您提供目标 URL,您可以使用该 URL 来检测目标是否位于大文件夹结构内。如果是这样,请从 Windows 资源管理器实例查询 IShellBrowser 服务,然后调用 QueryActiveShellView 以获取 shell 视图。获取 shell 视图后,对 IFolderView2 进行 QI,然后调用 SetSortColumns

代码项目上的自动执行活动 Windows 资源管理器或 Internet Explorer 窗口示例包含大部分代码,只不过它调用 IShellView::SelectItem 来模拟末尾的 SHOpenFolderAndSelectItems

评论

0赞 6/28/2019
如果我想以编程方式创建一个文件夹,然后为其提供特定的列布局,我是否必须使用这样的技术(使用 IColumnManager)?或者有没有办法为始终坚持的文件夹设置列布局?
0赞 Sheng Jiang 蒋晟 6/30/2019
创建一个自定义库并将您的文件夹添加到其中。
1赞 Matt 7/15/2015 #2

您可以通过按住 CTRL 键并单击右上角的 X 来保存资源管理器排序设置。

http://blog.chron.com/helpline/2009/01/saving-explorer-sort-order/