提问人:pek 提问时间:8/24/2008 最后编辑:Uwepek 更新时间:12/14/2017 访问量:1981
将我的程序与 Windows 资源管理器的重命名事件挂钩
Hooking my program with windows explorer's rename event
问:
当用户重命名文件时,是否有任何语言可以挂钩我的程序?
例如: 用户重命名文件并按回车键(或单击离开)以确认重命名操作。 在实际重命名文件之前,我的程序会“监听”此事件并弹出一条消息,指出“您确定要将 C:\test\file.txt 重命名为 C:\test\test.txt?
我在想/希望这可以通过C++,C#或.NET实现。但我不知道该去哪里找。
答:
我的猜测是这是不可能的,我确实找到了它,用于监视文件夹上的操作(包括重命名),但似乎没有类似的文件方法。
@Richard,如果您只需要监视更改,FileSystemWatcher 很好,但他需要中断它们,这是它无法做到的。
您可以通过使用 .NET Framework 中的 FileSystemWatcher 类来解决此问题。
从课堂评论:
您可以观察重命名、删除、 或创建文件或目录。 例如,要监视 文本文件,将 Filter 属性设置为 “*.txt”并调用 WaitForChanged 方法,并指定了 Renamed for 其参数。
IFileOperationProgressSink.PreRenameItem
是我所知道的最接近支持的东西。不幸的是,它不是资源管理器的钩子 - 所以你只能将它用于你自己的操作。根据你的需要,你可以编写一个 shell 扩展来做你自己的(或其他东西),并从那里分支。IFileOperation
ConfirmRename
否则,我认为你正在看钩子。这必须在非托管代码中完成,因为您将被加载到Explorer.exe中。对于 Vista,这已更改为 - 这可能意味着您必须钩住它的创建并传递您的模拟。SHFileOperation
IFileOperation
就我个人而言,我认为既然您正在谈论重命名,那么 wilhelmtell 在更改后确认并在必要时撤消它的想法是最好的主意。
评论