与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的想法是在更改后进行确认,并在必要时撤消它是最好的主意。