为什么 Windows 应用程序在保存最近访问的目录时会有不同的行为?

为什么 Windows 应用程序在保存最近访问的目录时会有不同的行为?

我想知道为什么某些应用程序在 Windows“另存为”对话框中显示最近访问的目录时会有不同的行为。例如,当我使用 Adob​​e Photoshop CC 时,我可以选择地址栏右侧的下拉箭头:

在此处输入图片描述

会出现一个目录列表,但不是按最新内容排列的。它显示的目录几乎是随机的。事实上,有些目录我从未从该应用程序保存过,这让我相信不是该应用程序在整理列表,而是某些 Windows 功能。

与此相反,其他应用程序(例如 3dsMax)会根据实际访问的目录填充列表,并按上次访问的顺序列出它们:

在此处输入图片描述

我知道这些程序以不同的方式实现“另存为”,因为“另存为”窗口的行为方式不同。在 Photoshop 中,用户可以在地址栏中选择目录路径,然后从剪贴板粘贴路径(或手动输入路径)。

相比之下,3dsMax 允许这种操作的方式略有不同(顶部的地址栏实际上是应用程序实现的历史记录栏,但用户可以通过下拉式菜单导航目录,或者在文件名字段中粘贴目录名。

这些只是示例(每个示例都有自己的优点和缺点),但是它们表明,当涉及“另存为”窗口时,并没有一种适用于所有应用程序的通用行为。

我对这一切感到困惑,因为当调用“另存为”功能时,似乎所有应用程序都在使用某种形式的 Explorer shell。我相信这些应用程序正在使用 Explorer shell,因为我们仍然可以在这些窗口中执行 Explorer 功能,例如复制文件、创建新文件夹、删除文件和撤消操作。

这让我想到了我的问题:

当 Windows 应用程序都使用某种形式的 Explorer shell 时,为什么在保存到最近访问的目录时会有不同的行为?

答案1

我对这一切感到困惑,因为当调用“另存为”功能时,似乎所有应用程序都在使用某种形式的 Explorer shell。我相信这些应用程序正在使用 Explorer shell,因为我们仍然可以在这些窗口中执行 Explorer 功能,例如复制文件、创建新文件夹、删除文件和撤消操作。

这两件事并不相互排斥——可以嵌入只是“ShellFolderView”控件(Explorer 使用的图标/列表视图),同时仍围绕它构建一个完全自定义的对话框,3dsMax 很可能就是这么做的。这与嵌入标准“按钮”或“下拉列表框”控件非常相似。

确实,这也是标准打开/保存对话框也是如此。标准对话框也不是资源管理器窗口——它只是被设计得有点像资源管理器窗口,但实际上它只是一个嵌入了 ShellFolderView 的对话框窗口。(最初在 Windows 95 中它甚至没有通常的“资源管理器”功能;在 Windows 98 中添加了从打开/保存对话框中管理文件的功能。)

(作为一个具体的例子这个项目让我想起,Office 2000 也带来了自己的文件打开/保存对话框,其外观独特(侧边栏和预览窗格,当时 Windows 标准对话框都没有);整个对话框都是自定义构建的,除了有一个相似的布局并嵌入标准文件夹视图。

这是可以构建提供几乎相同功能的自定义图标/列表视图控件。任何程序都可以创建新文件夹,但 Explorer 本身提供了对其许多功能的编程访问 - 例如,任何程序都可以弹出 Explorer 样式的右键菜单(带有扩展),任何程序都可以请求通过 Explorer 删除文件。

(第三方文件管理器如 Total Commander 通常这样做;文件列表是自定义的,但如果需要,可以通过 shell 进行交互。Total Commander 可以自行处理文件移动/重命名,因为任何程序都可以重命名文件,但它允许通过 Explorer 进行删除,以便文件进入回收站。)

相关内容