【asp精品源码栏目提醒】:网学会员在asp精品源码频道为大家收集整理了“AutoCAD二次开发程序的自动安装处理 - 能源电力“提供大家参考,希望对大家有所帮助!
AutoCAD 二次开发程序的自动安装处理 AutoCAD 的二次开发主要涉及以下内容:(1)编写各种用户自定义函数并形成若干 LISP、ARX、VLX 或 ADS 文件, ( 建立符合自己要求的菜单文件,以及一些 DCL 文件。
2) 对于 AutoCAD2000 一般可在 AutoCAD 原菜单文件内添加自己的内容,版本还可增加部分菜单文件,然后经交互方式加入到系统中去。
(3)在系统的 ACAD.LSP 或类似文件中加入某些内容以便进行各种初始化操作,如在启动时立即装入一些文件等。
(4)通过系统对话框设置某些路径。
这些操作在程序开发成功后向其它 AutoCAD 系统上安装应用,特别是需要大批安装时,需要进行很多文件检索、内容增删、子目录创建、文件拷贝、系统设置等繁琐工作,如能令上述工作全部自动进行,使整个二次开发程序在无人干预的情况下嵌入系统,将大大提高
工作效率。
为此笔者用 VC开发了一套自动安装程序,使原本需要五、六分钟的人工操作在十几秒内即可自动完成。
一、 基本思路 整个安装程序遵循以下思路: 1) 首先获得所在机器 AutoCAD2000 系统的安装路径; 2) 寻找菜单文件 AutoCAD2000supportacad.mnu,打开文件并将要添加的内容加至末尾; 3) 寻找 LISP 文件 AutoCAD2000supportacad2000doc.lsp,打开文件并将要添加的内容加至末尾; 4) 创建一个预先命名的子目录,将所有二次开发形成的各类文件拷入; 5) 给出信息框,告知安装成功,如有问题则告知安装失败。
需要指出的是,在添入 acad2000doc.lsp 的内容中须有如下语句: (command“_menu”strcat getvar quotmenunamequot quot.mnuquot),目的是为了强制执行菜单文件装入命令,将改动后的 acad.mnu 文件编译后装入。
另外,在添入 acad2000doc.lsp 的内容中还有一赋值语句,将准备创建的包含所有二次开发生成文件的子目录全路径名赋予一全局变量,以供二次开发程序在需要时调用,从而避免了在 AutoCAD 环境下交互设定路径的麻烦。
二、 实现方式及关键函数 为获得 AutoCAD2000 的安装路径,需要利用 WINDOWS 系统注册表的有关功能。
首先通过 RegOpenKey 函数打开注册表: HKEY hKey LONGretRegOpenKey HKEY_LOCAL_MACHINE quotSoftwareAutodeskAutoCADR14.0ACAD-1:804quot amphKey 其中第一参数 HKEY_LOCAL-MACHINE 为注册表中预定义的主键句柄,第二参数为
注册表中 HKEY_LOCAL_MACHINE下的子键内容,第三参数 hKey 将返回一子键句柄,用于接下来的键值查询。
若该函数运行成功,将返回一长整型数 ERROR_SUCCESS。
接下来利用 RegQueryValueEx 函数进行键值查询: DWORD dwTypeREG_SZ BYTE szData100 DWORD dwSizesizeofszData If retERROR_SUCCESS retRegQueryValueExhKey quotAcadLocationquot 0 ampdwType szData ampdwSize 其中第一参数 hKey 为由 RegOpenKey 函数获得的欲查询的子键句柄;第二参数“AcadLocation”为欲查询的键值名;第三参数为保留项,要求添 0;第四参数为键值数据类型;第六参数为键值缓冲器容量;最关键的是第五参数 szData,欲查询的键值结果将由其带回,该键值即为所需要的 AutoCAD2000 的安装路径。
以上涉及到的有关注册表中主键、子键、键值名、及键值的关系可通过下列方法由 WINDOWS 系列注册表查出:单击“开始”――“运行”――添入“regedit”――“确定”――“HKEY_LOCAL_MACHINE”――“Software”――“Autodesk”――“Autocad”――“R15.0”――“ACAD-1:804”――“AcadLocation”――“e:autocad2000”。
其中的键值名“AcadLocation”所对应的键值为“e:auto
cad2000”,就是 AutoCAD2000 的安装路径,在不同的机器上可能内容不同。
键值
查询函数若运行成功,将返回长整型数 ERROR_SUCCESS。
下面可利用 szData 带回的路径名与已知路径名组合成全路径从而打开菜单文件 acad.mnu 添加内容: char szRootName100supportacad.mnu if retERROR_SUCCESS 1strcatchar szData szRootName 现在 szData 中装有 acad.mnu 的全路径,以下操作将打开该文件并添入内容: HANDLE hfileCreateFilechar szData GENERIC_READGENERIC_WRITE 0 NULL OPEN_EXISTING FILE_ATTRIBUTE_NORMAL NULL IfhfileINVALID_HANDLE_VALUE if 0xFFFFFFFFSetFilePointerhfile 0 NULL FILE_END char szBuf1000quot POP12 CAM ampCAM -gt基本参数 卡盘原点ccchuck_datam 换刀原点 cctool_datam lt-毛坯参数 ccstock 工步设计 ccsteps 仿真加工 ccsimulation 代码生成 ccgen_code 代码存盘 ccco