文件系统钩子.doc打开C#

我正在编写一个应用程序,需要通知每个打开的doc文件,我尝试过使用FileSystemWatcher但现在看来NotifyFilter 。 由于开销很大, LastAccess被禁用。

我想我可以使用LastWrite ,但这意味着我需要尝试从打开文档时该单词创建的临时文件中找出原始文件名。

我还需要密切关注4个目录,所以理想情况下我不想对它们进行轮询。

我知道我可以写一个WordAddin ,这是一个选项,但这意味着另一个部署管理,另一个代码库和另一个产品,以支持许多用户总是看到插件作为减速源的问题。

是否有一种简单的方法可以告诉Windows Vista我想知道有关已打开的doc或docx?

我想知道的一件事是,我是否可以将与.doc相关联的默认程序更改为我的,这是作为服务运行,然后将详细信息传递给我,以便打开? 这看起来有点像黑客,所以我想知道是否有一种简单的方法来挂钩这些类型的文件打开?

UPDATE

从这里与各种人交谈,最可靠的方式(和大多数资源有效)似乎是替换.doc的现有文件关联。 &.docx到我自己的程序,然后使用Microsoft.Office.Interop.Word启动word,然后挂钩到DocumentOpen事件。

这样我就可以获得正在打开的文件名以及任何未来的文档。

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

〜$ very_important_file.doc

它包含打开文件的用户的名称。 请注意,该文件具有隐藏属性集。

这使得很容易弄清楚哪个文档实际上是打开的以及由谁来打开。

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