当用户重命名文件时,有什么方法可以用任何语言挂钩我的程序?
例如:用户重命名文件并按下回车键(或单击离开)以确认重命名操作。在文件实际重命名之前,我的程序“侦听”此事件并弹出一条消息“您确定要将 C:\test\file.txt 重命名为 C:\test\test.txt?”。
我在想/希望这可以通过 C++、C# 或 .NET 实现。但我不知道在哪里寻找。
您可以通过使用.NET 框架中的FileSystemWatcher 类来解决这个问题。
来自课堂评论:
您可以监视文件或目录的重命名、删除或创建。例如,要监视文本文件的重命名,请将 Filter 属性设置为“*.txt”并调用 WaitForChanged 方法并为其参数指定重命名。
我的猜测是这是不可能的,我确实发现这是用于监视文件夹上的操作(包括重命名),但似乎没有类似的文件方法。
@Richard,如果您只需要监视更改,则 FileSystemWatcher 很好,但他需要中断它们,这是它无法做到的。
IFileOperationProgressSink.PreRenameItem
是我所知道的最受支持的东西。不幸的是,它不是 Explorer 的挂钩 - 所以您只能将它用于您自己的IFileOperation
操作。根据您的需要,您可以编写一个 shell 扩展来做自己的ConfirmRename
(或其他事情),然后从那里分支。
SHFileOperation
否则,我认为您正在寻找钩子。这必须在非托管代码中完成,因为您将被加载到 Explorer.exe。对于 Vista,这已更改为IFileOperation
- 这可能意味着您必须挂钩它的创建并传递您的模拟。
就个人而言,我认为既然您正在谈论重命名,wilhelmtell 的想法是在更改后确认并在必要时撤消它是最好的主意。