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

时间:2020-03-05 18:42:30  来源:igfitidea点击:

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

例如:
用户重命名文件,然后按Enter(或者单击离开)以确认重命名操作。在实际重命名文件之前,我的程序"监听"此事件并弹出一条消息,"我们确定要将C:\ test \ file.txt重命名为C:\ test \ test.txt吗?"。

我在想/希望用C ++,Cor .NET可以实现。但是我不知道在哪里寻找。

解决方案

回答

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

@ Richard,FileSystemWatcher是很好的选择,如果我们只需要监视更改,但是他需要中断它们却无法执行。

回答

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

从课堂讲解:

You can watch for renaming, deletion,
  or creation of files or directories.
  For example, to watch for renaming of
  text files, set the Filter property to
  "*.txt" and call the WaitForChanged
  method with a Renamed specified for
  its parameter.

回答

IFileOperationProgressSink.PreRenameItem是我所知道的最受支持的东西。不幸的是,它不是Explorer的钩子,因此只能将其用于自己的IFileOperation操作。根据需要,我们可以编写一个shell扩展来执行自己的ConfirmRename(或者其他操作),然后从那里分支。

否则,我认为我们正在寻找的是钩住" SHFileOperation"。这将必须用非托管代码完成,因为我们将被加载到Explorer.exe中。对于Vista,它已更改为IFileOperation,这可能意味着我们必须钩住它的创建并传递模拟。

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