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

Hooking my program with windows explorer's rename event

提问人:pek 提问时间:8/24/2008 最后编辑:Uwepek 更新时间:12/14/2017 访问量:1981

问:

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

例如: 用户重命名文件并按回车键(或单击离开)以确认重命名操作。 在实际重命名文件之前,我的程序会“监听”此事件并弹出一条消息,指出“您确定要将 C:\test\file.txt 重命名为 C:\test\test.txt?

我在想/希望这可以通过C++,C#或.NET实现。但我不知道该去哪里找。

C# .NET 文件 IO

评论


答:

0赞 thelsdj 8/24/2008 #1

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

@Richard,如果您只需要监视更改,FileSystemWatcher 很好,但他需要中断它们,这是它无法做到的。

5赞 Riri 8/24/2008 #2

您可以通过使用 .NET Framework 中的 FileSystemWatcher 类来解决此问题。

从课堂评论:

您可以观察重命名、删除、 或创建文件或目录。 例如,要监视 文本文件,将 Filter 属性设置为 “*.txt”并调用 WaitForChanged 方法,并指定了 Renamed for 其参数。

0赞 Mark Brackett 8/24/2008 #3

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

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

就我个人而言,我认为既然您正在谈论重命名,那么 wilhelmtell 在更改确认并在必要时撤消它的想法是最好的主意。