2012-08-16 60 views
0

我想知道是否有辦法獲取在用戶計算機上打開的所有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

回答

1

此處的一種方法是聯繫並使用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); 
    } 
} 
相關問題