每当打开某种类型的文件时,是否可以执行某些代码?在我的情况下,我想“听”视频文件(“.avi,mp4等”)何时打开(通过Windows文件浏览器shell,或者直接从视频播放器?),这样我就可以存储播放视频的历史。
一小时的谷歌搜索没有任何结果,所以我转向你stackoverflow。请指出我正确的方向。
感谢。
答案 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
仅在您的程序正在运行时才会起作用。即使您的代码根本没有运行,更改日志也会让您了解发生的事情。
功能