我想编写一个自定义的另存为对话框,该对话框连接到大多数 Windows 程序的文件 - >“另存为”。此自定义对话框将允许用户输入他们的用户名、密码、目标文件夹并通过 POST 将文件上传到 Web 服务器。如果用户单击取消,它将调用原始文件对话框。
我一直在阅读有关 Windows API 挂钩的信息,这模糊地是我认为我会如何处理这个问题:
- 拦截“另存为”
- 显示我的自定义对话框,返回驱动器上的一些临时路径
- 让程序将文件写入临时路径,假设它现在调用 WINAPI CreateFile(...)
- 读取临时文件并上传到网络服务器
- 清理临时文件
但我仍然无法理解实现这一目标所需的步骤。假设我可以拦截“另存为”和 CreateFile 函数,我如何检测 CreateFile 是从“另存为”调用的,而不仅仅是任何随机文件创建?我可以想到一个技巧,我可以跟踪打开文件对话框和调用 CreateFile 的时间差。
我的替代解决方案是使用现有的文件对话框并在磁盘上创建一个特殊的文件夹,该文件夹会受到持续监控。当一个文件被写入那里时,它将调用一个上传文件的外部程序。我还没有研究如何做到这一点。我怀疑这更容易。
更新
作为第一步,我编写了一个 .NET 任务托盘应用程序,它允许用户输入他们的登录详细信息和一个要监视的文件夹。每当一个文件被放在那里时,它都会上传到网络服务器。到目前为止,它似乎工作。现在我只需要弄清楚如何在文件对话框的左窗格中添加一个不错的快捷方式。一旦完成,我想我得到了一个我满意的解决方案。