CAD工具之家's Archivers

From boitboy on 2013-08-31 09:53:50

GetActiveObject 获取多个实例

示例代码获取多个AutoCAD的IAcadApplication实例,只要修改Guid,就可以获取其它类型实例 [DllImport("ole32.dll", EntryPoint = "CreateBindCtx")]         public static extern int CreateBindCtx_(int reserved, out IBindCtx ppbc);         /// <summary>         /// 枚举当前所有活动的CAD进程(暂时只能枚举AutoCAD2008的,后续再增加)         /// </summary>         /// <param name="apps"></param>         public void ListAllCADApplication(List<IAcadApplication> apps)         {             IBindCtx pbc = null;             CreateBindCtx_(0, out pbc);             IRunningObjectTable pprot = null;             pbc.GetRunningObjectTable(out pprot);             IEnumMoniker ppenumMoniker = null;             pprot.EnumRunning(out ppenumMoniker);             ppenumMoniker.Reset();             IMoniker[] rgelt = new IMoniker[1];             rgelt[0] = null;             int rc = 0;             rc = ppenumMoniker.Next(1, rgelt, IntPtr.Zero);             while (rgelt[0] != null)             {                 string ppszDisplayName;                 rgelt[0].GetDisplayName(pbc, null, out ppszDisplayName);                 //可以在注册表中"HKEY_LOCAL_MACHINE\SOFTWARE\Classes"下面找到对应的GUID                 if (string.Compare(ppszDisplayName, "!{6AB55F46-2523-4701-A912-B226F46252BA}", true) == 0)                 {                     //是AutoCAD2008进程                     object obj = null;                     pprot.GetObject(rgelt[0], out obj);                     if (obj == null)                     {                         continue;                     }                     IAcadApplication app = (IAcadApplication)obj;                     if (app == null)                     {                         continue;                     }                     apps.Add(app);                 }                 rgelt[0] = null;                 rc = ppenumMoniker.Next(1, rgelt, IntPtr.Zero);             }         }

查看完整版本: GetActiveObject 获取多个实例

Tags: GetActiveObject, 多个实例


©CAD工具之家
创办于:2013年5月24日