.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中打开的任何文档。

.doc打开C#的文件系统挂钩

如果我没有记错,在同一文件夹中创建的临时文件的文件名格式为~$+filename,例如:

~$very_important_file.doc

它包含打开文件的用户的名称。请注意,该文件已设置了隐藏属性。

这样就很容易弄清楚哪个文档是真正打开的,由谁打开。

此类任务通常使用文件系统过滤器驱动程序来完成。Procmon就是这样工作的。您可以创建自己的筛选器驱动程序或使用预先创建的驱动程序(例如我们的CallbackFilter)。