C# 外部アプリケーションとの COM インターフェイスを介して、実行中の AutoCAD 2007 のすべてのインスタンスに関する情報(開いているドキュメントの完全な名前のリスト)を取得しようとしています。コードは次のとおりです。
…
using AutoCAD = Autodesk.AutoCAD.Interop;
using System.Runtime.InteropServices.ComTypes;
…
[DllImport("ole32.dll")]
extern static IntPtr CreateBindCtx(IntPtr reserved, out IBindCtx ppbc);
…
static void ListACADDocs()
{
IntPtr HRESULT;
IBindCtx objCtx = null;
HRESULT = CreateBindCtx(new IntPtr(0), out objCtx);
IRunningObjectTable objRot = null;
objCtx.GetRunningObjectTable(out objRot);
IEnumMoniker RunningMonikers = null;
objRot.EnumRunning(out RunningMonikers);
RunningMonikers.Reset();
IntPtr pointerFetchedMonikers = IntPtr.Zero;
IMoniker[] monikerContainer = new IMoniker[1];
String strDisplayName;
Object COMObject = null;
List<Object> colACADInstances = new List<Object>();
while (RunningMonikers.Next(1, monikerContainer, pointerFetchedMonikers) == 0)
{
monikerContainer[0].GetDisplayName(objCtx, null, out strDisplayName);
objRot.GetObject(monikerContainer[0], out COMObject);
//AutoCAD.Application.17 class ID: {28B7AA99-C0F9-4C47-995E-8A8D729603A1}
if (strDisplayName == "!{28B7AA99-C0F9-4C47-995E-8A8D729603A1}")
colACADInstances.Add(COMObject);
}
foreach (Object obj in colACADInstances)
foreach(AutoCAD.AcadDocument doc in
((AutoCAD.AcadApplication)obj).Documents)
Console.WriteLine(doc.FullName);
}
その結果、実行中のすべての ACAD インスタンスに対応する正しい数のモニカが検出されますが、「最も古い」インスタンスからのみドキュメントの名前が取得されます。すべてのモニカが単一の AutoCAD.AcadApplication オブジェクトを参照しているようです。すべてのインスタンスに対してそれを行う方法はありますか?