如何在资源管理器的重命名事件中挂钩C ++

时间:2011-02-05 22:53:37

标签: c++ winapi

我不能比我的头衔清楚。 :P

每当用户在Windows资源管理器中重命名文件(并且仅在资源管理器中)时,我想运行我的程序。这是一个简单的模拟:

Rename Hook Mockup

指向教程的简单链接将非常有用。我找不到任何东西。 :/

提前谢谢。

P.S。我是C ++的新手

2 个答案:

答案 0 :(得分:3)

看起来Windows API挂钩可能是您最好的选择。您将要拦截与Windows文件重命名相关的所有调用(即MoveFile,MoveFileEx,SHFileOperation,可能更多)。有一些商业和开源解决方案; Microsoft DetoursMadshi's madCodeHook以及免费的开源EasyHook

如果操作正确,此方法将允许您捕获系统上的所有文件重命名。

答案 1 :(得分:2)

我会尽量避免挂钩API。它变得非常难看。

我认为有两种方法可以解决这个问题 两种方式都有一些共同因素:

  • ReadDirectoryChangesW API。有关该API的非常好的实现,请参阅此内容 article
  • 您需要最小化您的依赖关系,因此...使用Microsoft编译器,链接到DLL运行时,尽可能地坚持C等。这样可以减少问题。将内容加载到shell内存空间已经存在问题。

方法一是使用Explorer外壳扩展中的ReadDirectoryChangesW,它不执行任何其他操作。保持最小化。我有理由相信我在微软的一些文档中看到了“无所事事”的shell扩展。

方法二是将代码打包为DLL并使用系统挂钩将DLL加载到Explorer中。系统挂钩应仅在Explorer内加载,以防止通过ReadDirectoryChangesW发送虚假通知。

希望这会有所帮助,并且你不会将它用于邪恶的东西。