windows api - 检测何时打开某种类型的文件

时间:2014-01-10 14:24:07

标签: windows winapi windows-shell

每当打开某种类型的文件时,是否可以执行某些代码?在我的情况下,我想“听”视频文件(“.avi,mp4等”)何时打开(通过Windows文件浏览器shell,或者直接从视频播放器?),这样我就可以存储播放视频的历史。

一小时的谷歌搜索没有任何结果,所以我转向你stackoverflow。请指出我正确的方向。

感谢。

2 个答案:

答案 0 :(得分:4)

从任意进程捕获文件系统事件(打开/读/写)的最佳(也是唯一合理的方法)是编写File System MiniFilter

如果您正在开发商业产品,请不要像“CreateFile”那样“挂钩”Usermode API。这样做需要大量特定于平台的黑客攻击,这是兼容性的噩梦。

答案 1 :(得分:1)

我不会挂钩CreateFile来完成这项工作。 Windows内置了一些机制来处理这样的工作。

处理此问题的简单方法是ReadDirectoryChangesW使用FILE_NOTIFY_CHANGE_LAST_ACCESS标记。无论何时打开文件,它的最后访问时间都会更新,因此只要文件被打开就会告诉你。

虽然这种情况非常罕见,但在极少数情况下可以“错过”更改 1 。如果你必须具有100%的准确度(而不是99.9%),你可以阅读change journals,但这可能是你可能不关心的优势的额外工作量。


1.有一种情况不是(必然)您可能会关心的情况:ReadDirectoryChangesW仅在您的程序正在运行时才会起作用。即使您的代码根本没有运行,更改日志也会让您了解发生的事情。 功能