我需要在另一个应用程序关闭文件时生成一个事件。
不幸的是,ReadDirectoryChangesW不报告close事件。我可以轮询(使用TTimer)由ReadDirectoryChangesW报告为修改的任何文件,等待它被关闭(使用CreateFile来检测它)。
然而,我更喜欢的是完全由事件驱动的解决方案。
有没有办法挂钩系统调用并检测所有文件关闭事件?我只想知道路径&刚刚关闭的任何文件的名称。
答案 0 :(得分:7)
单独使用Delphi时,您的问题没有一个简单的解决方案 - 真正的解决方案是编写filter driver来监控文件关闭事件。
答案 1 :(得分:5)
你应该看看Mathias Rauens madCodeHook:
madCodeHook提供您需要的一切 在所有32中挂钩代码(主要是API) 和64位Windows操作系统 从Windows 95到Windows 7.您可以 选择是否要挂钩API 在您自己的过程中,或在特定的过程中 目标流程或系统范围。
答案 2 :(得分:2)
如果您选择使用过滤器驱动程序路由,则Eldos具有CallbackFilter组件:
答案 3 :(得分:0)
如果更改通知不起作用,您可能会使用非常粗糙和蹩脚的方法:轮询。每隔一秒左右,尝试使用一些不兼容的共享选项打开文件。这成功的那一刻,你知道其他应用程序已关闭它。
目前还不是最干净的选择,但它会起作用。如果您需要监控有限数量的文件并且事先知道它们的名称,这只是一个选项。
答案 4 :(得分:-1)
在 Jedi Code LIbrary(JCL)中,您有一个名为“TJvChangeNotify”的组件,您可以在监视目录中检测到更改时获取通知 : / p>
它可以做的其他事情:
最重要的是,如果需要,它会在子目录中搜索。 以下是此组件的(部分)帮助文件的链接: http://help.delphi-jedi.org/item.php?Id=172982
希望这会有所帮助。