Windows 机密:历史 – 消逝并被遗忘

有关 Windows 95 保存搜索条件文件格式方面的提示/支持已经消失,这一点基本上未引起人们的注意。

Raymond Chen

以往在 Windows 95 中使用“查找文件”对话框时,您可以选择将搜索条件保存到文件中,以便以后再次执行。这些保存搜索条件文件的扩展名为 .fnd。

如果您双击其中的某个文件,将打开“查找文件”对话框,并执行保存的搜索条件。您可能已经注意到,Windows 7 中已停止使用这些 *.fnd 文件。对这些文件的支持也已经终止,但方式却不同寻常。

当有人建议终止对某种文件格式的支持时,Microsoft 将针对仍使用此类文件的用户数量展开全面调研,其目的是为了确定取消支持所产生问题的严重性。

如今,实现此过程的机制更为正式。弃用过程的一部分涉及向 Windows 中添加检测,以便确定有多少客户仍在使用即将弃用的任何文件格式。(为了让 Microsoft 了解您的想法,请参与 Microsoft 客户体验改善计划。)

文件的消亡

*.fnd 文件格式的消亡经历了一个非标准化的过程。您知道吗?我们在 10 年前进行了一次意外的实验。Windows 2000 意外地终止了与早期 Windows 版本中创建的保存搜索条件的向后兼容性。令人吃惊的是,Microsoft 外部的任何人均未注意到这一变化。这一点有力地证明了,实际上只有极少数用户使用保存的搜索条件。显而易见,您并不希望通过这种方式了解此信息,但掌握此信息还是很有用的。

Windows Vista 引入了一个新的保存搜索格式。如果您打开旧式 *.fnd 文件,此格式会将该文件自动转换为一种新的格式。如果保存该文件,它将保存为新格式。进一步的调查表明,没有人使用 *.fnd 文件。实际上,应该是几乎没人使用。

想必您知道,有一个程序使用 *.fnd 文件。该程序只在一个位置使用这些文件,并且使用方式取决于错误路径。此程序需要打开“查找文件”对话框,但不会调用 SHFindFiles 函数,也不会为 pidlSaveFile 传递 NULL。它使用 ShellExecute 找到应用程序中包含的特殊 *.fnd 文件。这可能是通过打开空搜索窗口并进行保存时创建的 *.fnd 文件,但它过于简单。相反,该程序将零字节的 *.fnd 文件传递给 ShellExecute 函数。

*.fnd 文件的处理程序将文件作为第二个参数传递给 SHFindFiles。这是一种使用零字节 *.fnd 文件调用 SHFindFiles 的间接方式。“查找文件”对话框将打开,并确定已获得一个用于恢复状态的文件。结果证明,零字节文件并非有效的 *.fnd 文件。“查找文件”对话框尝试恢复其状态,但却无法实现。

其结果是:“查找文件”对话框以默认状态显示在屏幕上。这是一种间接执行简单操作的方式,其工作原理是故意传递无效数据并依赖错误事件处理方式的细节。

嘿!*.fnd 文件又“起死回生”了

在 Windows 7 中,Microsoft 删除了用于将 *.fnd 文件转换为 *.search-ms 文件的代码。现在,所有传递给 SHFindFiles 的 *.fnd 文件将被视为已损坏,并产生一个默认的搜索窗口。

如果您的某个目录填充了在 Windows XP 中保存的旧搜索条件,该怎么办?您可以将这些搜索条件加载到 Windows Vista 中然后进行保存,从而对其进行转换。已保存的版本将采用新的 *.search-ms 格式,您可以在 Window 7 计算机中使用此格式。

Raymond Chen

Raymond Chen 的网站“The Old New Thing”以及同名著作(Addison-Wesley,2007)讲述了 Windows 的发展史、Win32 编程和其他有趣的内容。

 

相关内容