获取所有打开的Word应用程序的集合

问题描述:

我想知道是否有办法获取在用户计算机上打开的所有Word实例的列表?获取所有打开的Word应用程序的集合

我已经试过这样:

Process[]wordProcesses = Process.GetProcessesByName("WINWORD"); 

就永远线似乎只返回一个过程,我想是因为只有一个微软Word程序正在运行,但很多字的应用程序是开放的。

+1

你实际上是在问有多少文档是打开的 - 你不会要能够使用Process类来做到这一点,你可能有更多的运气与VSTO ... – Dave 2012-08-16 12:07:42

+2

http://stackoverflow.com/questions/4757615/c-sharp-list-currently-open-files-and-programs - 这可能会帮助 – KyorCode 2012-08-16 12:08:43

此处的一种方法是联系并使用AccessibleObjectFromWindow()从每个正在运行的Word实例中获取一个Microsoft.Office.Interop.Word.Application实例。这样可以很容易地查询他们的文档集合,并做任何你需要做的事情。

这个SO问题的答案会让你真的很接近:How to access Microsoft Word existing instance using late binding。这个问题的答案使用一个IDispatch参考操纵从AccessibleObjectFromWindow()获得的应用实例,但你应该能够做这样的事情:

if (hr >= 0) 
{ 
    var app = ptr.Application; 
    foreach (var item in app.Documents) 
     { 
      var doc = (Document) item; 
      Console.WriteLine(doc.FullName); 
    } 
}