【问题标题】:Programmatically Changing Explorer View in C#在 C# 中以编程方式更改资源管理器视图
【发布时间】:2009-10-27 18:22:16
【问题描述】:

我正在使用 C# 以编程方式创建一个文件夹,并且需要将文件夹的默认视图设置为“缩略图”。

【问题讨论】:

    标签: c# filesystems directory


    【解决方案1】:

    此处列出了相关的注册表项: http://support.microsoft.com/kb/812003

    但是,需要选择“记住每个文件夹的视图设置”才能使该知识库文章中的更改生效。程序在没有特定用户提示的情况下更改它似乎是“不良行为”。

    更新:对于desktop.ini,我从来没有使用过它;但是,该站点似乎列出了一些可能值得研究的 CLSID: http://www.xs4all.nl/~hwiegman/desktopini.html

    特别是 [ExtShellFolderViews] 部分。我试了一下,但没有任何运气。

    【讨论】:

    • 我认为这种行为没问题,因为应用程序正在创建文件夹——有点像 javascript 如何关闭它已经打开的窗口。
    • 我正在寻找一些要更改的注册表项,但我没有/不知道如何将注册表连接到文件夹。您是正确的,因为我不想为用户覆盖“记住每个文件夹的视图设置”。是否可以使用 desktop.ini 文件?
    • 我添加了我发现的关于 desktop.ini 的内容,但我对那条路线没有任何运气。另一个警告是 WinXP/2k 的注册表设置限制为 400 个文件夹。 Vista/2k8/Win7 似乎是可配置的,但如果打开了足够多的文件夹并查看存储的设置,您最终仍可能会丢失您喜欢的样式。
    【解决方案2】:

    我知道操作此设置的唯一方法是通过 pInvoke,但似乎没有消息将视图设置为缩略图。 Here 是针对 WinXP 的代码 sn-p。

    【讨论】:

      【解决方案3】:

      假设您自己使用ListView 执行此操作,您可以将View 属性设置为LargeIcon,或者如果这还不够(您提到缩略图),您可能应该设置@987654324 @ 为 true 的项目并自己绘制它们。

      【讨论】:

      • 我怀疑“LargeIcon”与“Thumbnail”相同。
      【解决方案4】:

      使用 FVM_THUMBSTRIP 调用 IFolderView::SetCurrentViewMode

      不确定应该从哪个资源管理器窗口查询 IFolderView。用户桌面上可能有多个资源管理器窗口,如果您的完整性级别较低,则在较高完整性级别下运行的浏览器窗口将拒绝您访问。

      【讨论】:

      • 创建文件夹后,我在资源管理器窗口中打开它,因此如果它是永久性更改,这可能是要走的路。意思是,在用户关闭文件夹并返回它之后,它仍然处于缩略图视图中(假设他们将“记住每个文件夹的视图设置”设置为 true)。我在 VB (vbforums.com/showthread.php?t=409476) 中找到了一个示例,但需要将其转换为 C#。
      • ShellExecute 在进程启动后不会让您控制。您可以编写一个 BHO 来检查父进程是否是您的应用程序并且当前的 exe 是 explorer.exe。如果两者都为真,则可以通过进程间通信方法从应用程序获取命令以执行,例如在 DocumentComplete 事件处理程序中更改视图模式。 blog.joycode.com/jiangsheng/archive/2004/09/17/33756.aspx是从IShellBrowser获取IFolderView的方法。
      • 在 BHO 中,您将从 IServiceProvider (codeproject.com/KB/shell/AutomateShellWindow.aspx) 获得 IShellBrowser 接口。
      【解决方案5】:

      根据这个post可以引用shdocvw.dll来查询当前的IServiceProvider。然后得到theIShellBrowser --> IShellView --> IFolderView。当您拥有IFolderView 时,您可以获取/设置文件夹的当前查看模式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-07
        • 1970-01-01
        相关资源
        最近更新 更多