ユーザーのマシンで開いているすべての Word インスタンスのリストを取得する方法があるかどうかを知りたいですか?
私はこれを試しました:
Process[]wordProcesses = Process.GetProcessesByName("WINWORD");
上記の行は、常に 1 つのプロセスのみを返しているように見えます。これは、実行中の MS Word プロセスは 1 つだけですが、多くの Word アプリが開いているためだと思います。
ここでのアプローチの 1 つはAccessibleObjectFromWindow()
、Word の実行中の各インスタンスから Microsoft.Office.Interop.Word.Application インスタンスにアクセスして取得することです。これにより、Documents コレクションに対してクエリを実行し、その他必要なことを簡単に行うことができます。
この SO の質問に対する答えは、あなたを本当に近づけます: How to access Microsoft Word existing instance using late binding。その答えは IDispatch 参照を使用して、取得した Application インスタンスを操作しますAccessibleObjectFromWindow()
が、次のようなことができるはずです。
if (hr >= 0)
{
var app = ptr.Application;
foreach (var item in app.Documents)
{
var doc = (Document) item;
Console.WriteLine(doc.FullName);
}
}