PM对象通过PMAutomation类初始化后访问
PMAutomation类初始化有几种模式

模式一:自动绑定Pm,原型如下:

public PMAutomation(InstanceReuse instanceReuse, Modes applicationMode = Modes.WithoutGui)

InstanceReuse 设置了绑定模式,可以从已激活的、创建一个新PM及关闭所有Pm再开一个PM选择
如果多开Pm时选择UseExistingInstance模式,将都会指向第一个PM,显然不符合实际要求
applicationMode 设置了Pm界面情况,可以设置为有界面或者无界面,个人认为与创建新PM实例配合使用
若重新开启一个Pm可以在CreateNewInstance函数中指定版本

模式二:手动指向一个COM对象(推荐)

PMAutomation提供了一个GetListOfPmComObjects静态类,可以返回所有已激活的PM COM组件对象列表,重载的PMAutomation构造函数可以接受COM组件进行PM指向。
实际使用时发现此列表Pm COM对象并不是按照Pm启动顺序排列的,如果列表中的某一个Pm进行活动,那么他的COM对象将排列在列表的最后。

解决方案是使用进程消息共享的方式,将插件与COM组件中携带的PM窗体句柄绑定,这样就不会导致插件的控制混乱。示例如下

                   public static MemoryMappedFile memoryAccessor;public static PMAutomation Pm{get{//通过进程间通信,完成窗体是否被绑定的判断if (pm == null){var objs = PMAutomation.GetListOfPmComObjects();LogHelper.Log.Info("Pm对象数", objs.Count);dynamic p = objs[objs.Count-1];foreach (dynamic obj in objs){p = obj;string win = string.Format("{0}", p.ParentWindow);LogHelper.Log.Info("ParentWindow:" + win);try{memoryAccessor = MemoryMappedFile.OpenExisting(win);LogHelper.Log.Info("该窗体已被绑定!");}catch (Exception){LogHelper.Log.Info("该窗体未被绑定,已绑定此实例");memoryAccessor = MemoryMappedFile.CreateNew(win, 10);pm = new PMAutomation(p);break;}}}return pm;}}

逻辑上
当用户将第一个Pm打开后关闭插件,而后打开第二个PM时,会绑定错误,但此种特殊情况做处理意义不大

Powermill 插件二次开发自动匹配当前打开的PowerMill相关推荐

  1. cad通过钢筋大样生成钢筋明细表插件_Revit二次开发——自动生成构件图(总结)...

    之前测试导出构件图的功能实现,拆分了各模块分布进行测试:Revit二次开发--一键导出构件图(1) Revit二次开发--叠合板自动配筋(2) Revit二次开发--自动标注钢筋思路(3) 本篇为这个 ...

  2. Revit二次开发——自动生成构件图(总结)

    之前测试导出构件图的功能实现,拆分了各模块分布进行测试: Revit二次开发--一键导出构件图(1) Revit二次开发--叠合板自动配筋(2) Revit二次开发--自动标注钢筋思路(3) 本篇为这 ...

  3. 陈伯雄lisp_基于AutoLisp的AutoCAD二次开发自动生成系统图

    龙源期刊网 http://www.qikan.com.cn 基于 AutoLisp 的 AutoCAD 二次开发自动 生成系统图 作者:郎建山 金江 来源:<科技视界> 2013 年第 2 ...

  4. CAD自控lisp_基于AutoLisp的AutoCAD二次开发自动生成系统图

    基于 AutoLisp 的 AutoCAD 二次开发自动生成系统图 [摘 要]本文主要阐述了应用 autolisp 语言二次开发 autocad 自动生成系统图的实现方案. [关键词] autocad ...

  5. DataX安装部署-Reader插件二次开发

    DataX DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.Oracle.SqlServer.Postgre.HDFS.Hive.ADS.HBase.TableS ...

  6. PowerMill C#插件二次开发 截图处理

    缘由 很多时候我们做二次开发需要用到截图命令,用来做示意图 然而,powermill自带一个截图命令,无法控制截图大小,非常不方便 以下介绍我自己的图片处理方式 初始化截图环境 隐藏除了目标模型以外的 ...

  7. cad二次开发——自动运行dll,加载菜单(收集)

    1.自动加载dll的方法(个人觉得下面第4个方法会更方便) cad加载dll_实现CAD插件启动自动加载的三种方法_weixin_39774556的博客-CSDN博客从网上或者别处淘来的CAD插件,效 ...

  8. 【二十】Jmeter:插件二次开发—— JMeter 源码导入 eclipse

    目录 一.源码官网下载 二.lib 目录官网下载 三.源码 & lib 目录 下载 四.导入eclipse 一.源码官网下载 点击前往官网下载并解压:下载地址 二.lib 目录官网下载 点击前 ...

  9. CATIA二次开发——自动导出BOM表

    一.引言 BOM物料清单称为产品结构表,用来表示产品是由那些零组件或素材原料所结合而成的,通常包括零件名称,零件编号,零件简图,零件尺寸,零件制造方法,零件质量,零件材质,BOM是后续项目进展的基础. ...

最新文章

  1. 包邮免费送2022年科研人专属趣味台历,微科盟年终福利,错过悔一年!
  2. poj2112(网络流-最大流+二分)
  3. [CF1082G]Petya and Graph
  4. 8个你应该了解的正则表达式
  5. Win10任务计划+PowerShell实现Git自动推送
  6. TensorFlow的基本介绍及Hello,world
  7. 第十四天-企业应用架构模式-Web表现模式
  8. 简单测试lambda和linq查找的性能
  9. Android三种动画知识总结
  10. 微信小程序实现视频功能(一):视频上传
  11. php 检查货币类型_php 统计每天价格,货币种类,汇总得算法和数据处理 (后端和前段实现自动统计价格和币种类型)...
  12. 【模电】0010 正弦波产生电路(RC正弦波振荡电路)
  13. Linux ls -l 各字段解释,硬链接软连接
  14. SpringBoot获取访问接口设备的ip地址以及设备类型
  15. SpringBoot 项目鉴权的 4 种方式
  16. vue项目报错:warning Disallow self-closing on HTML void elements (<img/>)
  17. 【黎乙丙】几种ps调色工具及使用方式
  18. Video IP:Video_In_to_AXI4-stream
  19. eclipse新建项目没有src解决办法
  20. Linux 静态IP,动态IP配置

热门文章

  1. (皮一下)震惊!周星驰居然选修过计算机课程?
  2. 你不知道的搜索引擎之高效率搜索
  3. XML之序列化C#实体类,DataTable,List
  4. SMI-S 存储管理 (1)
  5. Android Studio 解决错误 Could not find method android() for arguments
  6. Error running JeecgSystemApplication. Command line is too long.Shorten the command line via JAR m
  7. 基层服务项目服务器一般几年,基层呆几年回来或物是人非,有最低服务年限的公务员值不值得报?...
  8. 我的电脑用ipconfig查不到IP
  9. Create Ragdoll System In Goldsrc
  10. java localstorage_前端存储除了 localStorage 还有啥