将我的程序与 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 系统上启动时运行应用程序

Windows7中资源管理器的作用是啥?

git gui app 显示检测到的重命名

获取 Perl 重命名实用程序而不是内置的重命名

Winform 应用程序名称在 Windows 10 任务管理器的启动选项卡上显示为 _alphanumeric

将自己文件夹中的松散文件批量复制到新的重命名文件夹