提问人:Wes 提问时间:7/7/2015 最后编辑:Wes 更新时间:7/15/2015 访问量:547
在 Windows 8 上以编程方式对文件夹进行排序
Programmatically sort folders on Windows 8
问:
Windows 8 似乎不会在单个文件夹上保留排序顺序。我猜当资源管理器.exe终止时(例如重新启动时),这些首选项会被丢弃?打败我,我所知道的是一段时间(比如几天)后,这些偏好会完全消失。
有没有办法在 Windows 资源管理器中以编程方式复制文件夹排序(选择上下文菜单中的“排序依据”选项之一)?
这样,假设我在 Windows UI 中打开了一个文件夹。假设文件夹当前设置为按“名称”排序,并且在运行按大小排序的程序后,我再次检查Windows资源管理器中的排序顺序,现在显示“大小”?
我有一个特定的大文件夹结构,我希望它的所有文件夹及其子文件夹都按大小永久排序。因此,我想在查看它们之前运行此程序,而不必先单独手动重新排序它们。谢谢!
答:
排序顺序属于视图,而不是文件夹。您可以在同一文件夹上打开两个 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。
评论
您可以通过按住 CTRL 键并单击右上角的 X 来保存资源管理器排序设置。
http://blog.chron.com/helpline/2009/01/saving-explorer-sort-order/
评论