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

问题描述 投票:0回答:3

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

似乎没有提供这样的API来完成此任务,是否可以使用一些挂钩技术,但这必须可靠并且不会被防病毒工具视为间谍软件?

还有其他选择吗?

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

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

windows api openfiledialog
3个回答
5
投票

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

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

Vista 之前的文件对话框可以在进程中挂钩,但我从未遇到过任何有关全局挂钩或等效内容的内容。


0
投票

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

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

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

您也可以使用类似的方法,但粘贴到地址栏字段中即可。


0
投票

我很想看看你做的那个。我认为通用文件对话框是由 comdlg.dll 文件控制的,如果你能以这种格式保存你的工作,并相应地处理各种程序的所有调用,我认为它可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.