将我的程序与 Windows 资源管理器的重命名事件挂钩
Posted
技术标签:
【中文标题】将我的程序与 Windows 资源管理器的重命名事件挂钩【英文标题】:Hooking my program with windows explorer's rename event 【发布时间】:2010-09-06 16:21:32 【问题描述】:当用户重命名文件时,有什么方法可以用任何语言挂接我的程序吗?
例如: 用户重命名文件并按下回车键(或点击离开)以确认重命名操作。在文件实际重命名之前,我的程序“侦听”此事件并弹出一条消息“您确定要将 C:\test\file.txt 重命名为 C:\test\test.txt?”。
我正在考虑/希望这可以通过 C++、C# 或 .NET 实现。但我不知道在哪里寻找。
【问题讨论】:
【参考方案1】:您可以通过在 .NET 框架中使用 FileSystemWatcher class 来解决这个问题。
来自课堂评论:
您可以观看重命名、删除、 或创建文件或目录。 例如,要监视重命名 文本文件,将 Filter 属性设置为 "*.txt" 并调用 WaitForChanged 指定了重命名的方法 它的参数。
【讨论】:
【参考方案2】:我的猜测是不可能,我确实找到了this,它用于监视文件夹上的操作(包括重命名),但似乎没有类似的文件方法.
@Richard,如果您只需要监视更改,FileSystemWatcher 是不错的选择,但他需要中断它们,这是它无法做到的。
【讨论】:
【参考方案3】:IFileOperationProgressSink.PreRenameItem
是我所知道的最接近支持的东西。不幸的是,它不是 Explorer 的挂钩 - 所以您只能将它用于您自己的 IFileOperation
操作。根据你的需要,你可以编写一个 shell 扩展来做你自己的ConfirmRename
(或其他东西),然后从那里分支。
否则,我认为您正在寻找挂钩 SHFileOperation
。这必须在非托管代码中完成,因为您将被加载到 Explorer.exe。对于 Vista,这已更改为 IFileOperation
- 这可能意味着您必须挂钩它的创建并传递您的模拟。
就我个人而言,我认为既然您在谈论重命名,wilhelmtell's idea 在更改之后确认,并在必要时撤消它是最好的主意。
【讨论】:
以上是关于将我的程序与 Windows 资源管理器的重命名事件挂钩的主要内容,如果未能解决你的问题,请参考以下文章
如何在已修改为不运行资源管理器的 Windows 系统上启动时运行应用程序