使用Python“劫持”Windows文件打开事件

2024-04-28 16:07:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要把目录监视和事件“劫持”结合起来。基本上,我想让Python程序监听一个目录(及其子目录),以便用户双击(即打开/访问)文件。此时,我希望prgm停止事件传播并获得对文件的引用。在

简而言之:对于某些任意目录,我希望所有访问文件的尝试都首先通过我的程序,此时我可以在不受Windows干扰的情况下执行我想要的操作。如何做到这一点?在

背景:已经深入研究了pywin32,而且似乎即使是底层的windows操作系统文件系统api也没有通用的文件访问通知程序。虽然它声称存在,但测试显示,对于大多数对文件调用“open”的程序,文件访问时间戳不会更新,除非该文件被修改或保存。真的,我想要一些像inotify这样的东西,但是在所有windows移植的版本中,我发现这个“in峎OPEN”通知都被删除了。我想这和底层的WindowsAPI有关,但也许我遗漏了一些东西。。。在

谢谢

编辑: 哎呀,没想到这听起来像是垃圾。。。我需要访问文件打开事件的原因是这样用户可以打开一个只包含元数据的“存根”文件。然后使用这个存根生成一个临时文件,该文件最终将被传递给适当的应用程序。保存时,文件的内容被推送到分散的云存储后端。用户在任何时候都没有能力拥有机器上的文档。因此,“劫持”打开的文件是为了(1)用实际内容构建一个文件(2)用正确的应用程序打开该文件


Tags: 文件用户程序目录应用程序内容windows事件
2条回答

通过实现自己的扩展并将其与中间应用程序(在本例中为python脚本)关联,可以实现类似的功能。这不会捕获所有的文件操作,但可以通过扩展名显式地处理一些操作。在

可以使用assoc命令向运行python的bat文件注册扩展名:

https://superuser.com/questions/406985/programatically-associate-file-extensions-with-application-on-windows

您应该检查一下Dokan,一个Windows的用户模式文件系统,非常类似于FUSE,它存在于*NIX操作系统。不幸的是,有doesn't seem to be an active Python wrapper。在

Dokan FUSE“是一个使Dokan与fuseapi兼容的包装器库。”有了这个库,您就可以使用像fusepy这样的Python绑定。在

相关问题 更多 >