是否可以替换系统打开文件对话框?

时间:2009-06-09 04:42:07

标签: windows api openfiledialog

我想用我写的那个替换标准系统打开文件对话框,这意味着无论在哪个程序中打开文件,我的对话框都将显示而不是标准对话框,这可能吗?

似乎没有提供这样的API来实现这一点,是否可以使用一些挂钩技术,但这必须是可靠的并且不被反病毒工具视为间谍软件?

还有其他选择吗?

如果无法做到这一点,是否可以在标准打开文件对话框的空格键或工具栏中添加一个调用我的对话框的按钮,该按钮允许用户选择一个文件,然后将所选文件的路径返回到标准对话框的“文件名”输入框?

任何点击,链接和代码示例都将不胜感激。

2 个答案:

答案 0 :(得分:2)

从Vista开始,FileOpen / FileSave对话框现在是“Common Item Dialogs”,其中IFileOpenDialog& IFileSaveDialog是两个已发布的实现。

由于它们只是具有已知CLSID的COM对象,因此您可以通过使用其CLSID重新注册来替换它们。从未尝试过这样的事情,可能会绊倒各种警钟。

Vista之前的文件对话框可以是hooked in process,但我从来没有遇到任何有关全局挂钩或等效的内容。

答案 1 :(得分:1)

如果将文件/文件夹复制到对话框的文件名字段,它通常会粘贴完整路径。

例如,如果您打开了一个调用标准打开/保存对话框的程序,并且在您要使用的文件或路径上打开了一个窗口(打开/保存到),则只需复制即可浏览器窗口中的文件/文件夹,然后粘贴到对话框的文件名字段中,它将插入文件/文件夹的完整路径。不需要自定义脚本!

或者,对于那些使用此步骤失败的自定义对话框的程序,将窗口中的同一文件/文件夹复制到同一窗口的地址栏中(假设它是可见的)。这将粘贴完整路径,您可以再次复制,然后将此完整路径粘贴到自定义对话框中。我经常在创建Office超链接(Ctrl + K)时使用它,因为“插入超链接”对话框不适用于第一种方法。

你也可以使用类似的方法,但粘贴到地址栏字段,它可以工作。