現在、このコードを使用して、MS Word で開いているドキュメントのリストを取得しています。
List<string> doc_list = new List<string>();
try
{
Microsoft.Office.Interop.Word.Application WordObj;
WordObj = (Microsoft.Office.Interop.Word.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");
for (int i = 0; i < WordObj.Windows.Count; i++)
{
object idx = i + 1;
Window WinObj = WordObj.Windows.get_Item(ref idx);
doc_list.Add(WinObj.Document.FullName);
}
}
catch
{
// No documents opened
}
また、ドキュメントが「直接」開かれた場合、つまりドキュメントをダブルクリックして開いた場合も正しく機能します。ただし、MS Word ドキュメントを C# コードから直接開くと、次のようになることに気付きました。
Microsoft.Office.Interop.Word.Application word_app = new Microsoft.Office.Interop.Word.Application();
object inputFile = selected_doc; // "selected_doc" contains the document name
object confirmConversions = false;
object readOnly = false;
object visible = true;
object missing = Type.Missing;
Document doc = word_app.Documents.Open(
ref inputFile, ref confirmConversions, ref readOnly, ref missing,
ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref visible,
ref missing, ref missing, ref missing, ref missing);
この方法で開いたドキュメントは最初のコードでは検出されませんが、検出する必要があります。見つからないのはなぜですか?C# から開いたドキュメントが見つかるようにコードを変更するにはどうすればよいですか?