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