用Windows资源管理器的重命名事件挂钩我的程序

时间:2008-08-23 21:56:48

标签: c# .net file io

当用户重命名文件时,有任何语言可以挂钩我的程序吗?

例如: 用户重命名文件并按Enter(或单击)以确认重命名操作。在文件实际重命名之前,我的程序“侦听”此事件并弹出一条消息“你确定要将C:\ test \ file.txt重命名为C:\ test \ test.txt吗?”。 / p>

我在想/希望这可以通过C ++,C#或.NET实现。但我没有任何线索可以在哪里寻找。

3 个答案:

答案 0 :(得分:5)

您可以通过在.NET框架中使用FileSystemWatcher class来解决此问题。

来自课堂评论:

  

你可以留意重命名,删除,   或创建文件或目录。   例如,要注意重命名   文本文件,将Filter属性设置为   “* .txt”并调用WaitForChanged   为指定的重命名方法   它的参数。

答案 1 :(得分:0)

我的猜测是可能,我确实找到this用于监视文件夹上的操作(包括重命名),但似乎没有类似的方法对于文件。

@Richard,FileSystemWatcher很好,如果你只需要监视更改,但他需要中断它们不能做的事情。

答案 2 :(得分:0)

IFileOperationProgressSink.PreRenameItem是我所知道的最接近支持的内容。不幸的是,它不是资源管理器的钩子 - 因此您只能将它用于您自己的IFileOperation操作。根据您的需要,您可以编写一个shell扩展来执行自己的ConfirmRename(或其他内容),并从那里进行分支。

否则,我认为你正在考虑挂钩SHFileOperation。这必须在非托管代码中完成,因为您将加载到Explorer.exe中。对于Vista,这已经改为IFileOperation - 这可能意味着你必须挂钩它的创建并传递你的模拟。

我个人认为,因为你正在谈论重命名,wilhelmtell's idea在更改后确认,并在必要时撤消它是最好的主意。