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

时间:2014-11-07 08:15:40

标签: c# ms-word filesystems

我正在编写一个需要收到打开的每个doc文件通知的应用程序,我已尝试使用FileSystemWatcher但似乎这些天NotifyFilter。{ {1}}由于开销很大而被禁用。

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

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

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

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

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

更新

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

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

2 个答案:

答案 0 :(得分:1)

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

  

〜$ very_important_file.doc

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

这样可以很容易地找出哪个文档实际上是开放的以及由谁开放。

答案 1 :(得分:1)

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