监视类似于System Internal / Microsoft的FileMon / Process Monitor的文件

时间:2010-03-27 06:13:25

标签: delphi

我需要在另一个应用程序关闭文件时生成一个事件。

不幸的是,ReadDirectoryChangesW不报告close事件。我可以轮询(使用TTimer)由ReadDirectoryChangesW报告为修改的任何文件,等待它被关闭(使用CreateFile来检测它)。

然而,我更喜欢的是完全由事件驱动的解决方案。

有没有办法挂钩系统调用并检测所有文件关闭事件?我只想知道路径&刚刚关闭的任何文件的名称。

5 个答案:

答案 0 :(得分:7)

单独使用Delphi时,您的问题没有一个简单的解决方案 - 真正的解决方案是编写filter driver来监控文件关闭事件。

答案 1 :(得分:5)

你应该看看Mathias Rauens madCodeHook

  

madCodeHook提供您需要的一切   在所有32中挂钩代码(主要是API)   和64位Windows操作系统   从Windows 95到Windows 7.您可以   选择是否要挂钩API   在您自己的过程中,或在特定的过程中   目标流程或系统范围。

答案 2 :(得分:2)

如果您选择使用过滤器驱动程序路由,则Eldos具有CallbackFilter组件:

http://www.eldos.com/cbflt/spec.php

答案 3 :(得分:0)

如果更改通知不起作用,您可能会使用非常粗糙和蹩脚的方法:轮询。每隔一秒左右,尝试使用一些不兼容的共享选项打开文件。这成功的那一刻,你知道其他应用程序已关闭它。

目前还不是最干净的选择,但它会起作用。如果您需要监控有限数量的文件并且事先知道它们的名称,这只是一个选项。

答案 4 :(得分:-1)

Jedi Code LIbrary(JCL)中,您有一个名为“TJvChangeNotify”的组件,您可以在监视目录中检测到更改时获取通知 : / p>

  • 更改'上次写' =>所以这似乎是你想做的事情!

它可以做的其他事情:

  • 更改了文件大小
  • 更改了文件名 ...

最重要的是,如果需要,它会在子目录中搜索。 以下是此组件的(部分)帮助文件的链接: http://help.delphi-jedi.org/item.php?Id=172982

希望这会有所帮助。