.doc打开C#的文件系统挂钩
本文关键字:文件系统 打开 doc | 更新日期: 2023-09-27 18:29:35
我正在编写一个应用程序,需要通知打开的每个文档文件,我尝试过使用FileSystemWatcher
,但现在似乎是NotifyFilter
。CCD_ 3由于较大的开销而被禁用。
我想我可以使用LastWrite
,但这意味着我需要尝试从word打开文档时创建的临时文件中找出原始文件名。
我还需要监视4个目录,所以理想情况下我不想轮询它们。
我知道我可以写一个WordAddin
,这是一个选项,但这意味着要管理另一个部署,要支持另一个代码库和另一个产品,以及许多用户总是认为插件是速度减慢的原因的问题。
有没有一种简单的方法可以告诉windows Vista向上,我想了解打开的doc或docx?
我想知道的一件事是,我是否可以将与.doc相关的默认程序更改为我的程序,该程序作为服务运行,然后通过它将详细信息传递给我的程序以打开?这似乎有点像黑客攻击,所以我想知道是否有一种简单的方法可以连接到这些打开的文件中?
更新
通过与这里的不同人员讨论,最可靠的方法(也是最有效的资源)似乎是替换.doc的现有文件关联。docx到我自己的程序,然后使用Microsoft.Office.Interop.Word启动Word,然后挂钩到DocumentOpen事件。
这样,我就可以得到正在打开的文件名,以及将来在word中打开的任何文档。
如果我没有记错,在同一文件夹中创建的临时文件的文件名格式为~$+filename,例如:
~$very_important_file.doc
它包含打开文件的用户的名称。请注意,该文件已设置了隐藏属性。
这样就很容易弄清楚哪个文档是真正打开的,由谁打开。
此类任务通常使用文件系统过滤器驱动程序来完成。Procmon就是这样工作的。您可以创建自己的筛选器驱动程序或使用预先创建的驱动程序(例如我们的CallbackFilter)。