家居装修知识
模具知识|AutoCAD二次开发程序的自动安装处理
2016-05-26  浏览:81
模具之家讯:AutoCAD的二次开发主要涉及以下内容:(1)编写各种用户自定义函数并形成若干LISP、ARX、VLX或ADS文件,以及一些DCL文件。(2)建立符合自己要求的菜单文件,一般可在AutoCAD原菜单文件内添加自己的内容,对于AutoCAD2000版本还可增加部分菜单文件,然后经交互方式加入到系统中去。(3)在系统的ACAD.LSP或类似文件中加入某些内容以便进行各种初始化操作,如在启动时立即装入一些文件等。(4)通过系统对话框设置某些路径。这些操作在程序开发成功后向其它AutoCAD系统上安装应用,特别是需要大批安装时,需要进行很多文件检索、内容增删、子目录创建、文件拷贝、系统设置等繁琐工作,如能令上述工作全部自动进行,使整个二次开发程序在无人干预的情况下嵌入系统,将大大提高工作效率。为此笔者用VC++开发了一套自动安装程序,使原本需要五、六分钟的人工操作在十几秒内即可自动完成。

一、基本思路

整个安装程序遵循以下思路:

1) 首先获得所在机器AutoCAD2000系统的安装路径;
2) 寻找菜单文件AutoCAD2000\\support\\acad.mnu,打开文件并将要添加的内容加至末尾;
3) 寻找LISP文件AutoCAD2000\\support\\acad2000doc.lsp,打开文件并将要添加的内容加至末尾;
4) 创建一个预先命名的子目录,将所有二次开发形成的各类文件拷入;
5) 给出信息框,告知安装成功,如有问题则告知安装失败。

需要指出的是,在添入acad2000doc.lsp的内容中须有如下语句:

(command“_menu”(strcat (getvar "menuname") ".mnu")),目的是为了强制执行菜单文件装入命令,将改动后的acad.mnu文件编译后装入。

另外,在添入acad2000doc.lsp的内容中还有一赋值语句,将准备创建的包含所有二次开发生成文件的子目录全路径名赋予一全局变量,以供二次开发程序在需要时调用,从而避免了在AutoCAD环境下交互设定路径的麻烦。
境下交互设定路径的麻烦。

二、实现方式及关键函数

为获得AutoCAD2000的安装路径,需要利用WINDOWS系统注册表的有关功能。
首先通过RegOpenKey函数打开注册表:

HKEY hKey;
LonGret=RegOpenKey( HKEY_LOCAL_MACHINE, "Software\\Autodesk\\AutoCAD\\R14.0\\ACAD-1:804", &hKey);

其中第一参数HKEY_LOCAL-MACHINE为注册表中预定义的主键句柄,第二参数为注册表中HKEY_LOCAL_MACHINE下的子键内容,第三参数hKey将返回一子键句柄,用于接下来的键值查询。若该函数运行成功,将返回一长整型数ERROR_SUCCESS。

接下来利用RegQueryValueEx函数进行键值查询:

DWORD dwType=REG_SZ;
BYTE szData[100];
DWORD dwSize=sizeof(szData);
If (ret=ERROR_SUCCESS)
ret=RegQueryValueEx(hKey, "AcadLocation", 0, &dwType, szData, &dwSize);

其中第一参数hKey为由RegOpenKey函数获得的欲查询的子键句柄;第二参数“AcadLocation”为欲查询的键值名;第三参数为保留项,要求添0;第四参数为键值数据类型;第六参数为键值缓冲器容量;最关键的是第五参数szData,欲查询的键值结果将由其带回,该键值即为所需要的 AutoCAD2000的安装路径。

以上涉及到的有关注册表中主键、子键、键值名、及键值的关系可通过下列方法由WINDOWS系列注册表查出:单击“开始”--“运行”--添入“regedit”--“确定”--“HKEY_LOCAL_MACHINE”--“Software”- -“Autodesk”--“Autocad”--“R15.0”--“ACAD-1:804”--“AcadLocation”--“e:\ autocad2000”。其中的键值名“AcadLocation”所对应的键值为“e:\autocad2000”,就是AutoCAD2000的安装路径,在不同的机器上可能内容不同。

键值查询函数若运行成功,将返回长整型数ERROR_SUCCESS。


char szRootName[100]=\\support\\acad.mnu;
if (ret=ERROR_SUCCESS)
1strcat((char*) szData, szRootName);
现在szData中装有acad.mnu的全路径,以下操作将打开该文件并添入内容:
HANDLE hfile=CreateFile((char*) szData, GENERIC_READ|GENERIC_WRITE, 0,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
If(hfile!=INVALID_HANDLE_VALUE)
{
if (0xFFFFFFFF!=SetFilePointer(hfile, 0, NULL, FILE_END))
{
char szBuf[1000]="\n***POP12\n**CAM\n[&CAM]\n[->基本参数]\n[卡盘原点] ^c^cchuck_datam\n[换刀原点] ^c^ctool_datam\n[<-毛坯参数] ^c^cstock\n[工步设计] ^c^csteps\n[仿真加工] ^c^csimulation\n[代码生成] ^c^cgen_code\n[代码存盘] ^c^ccode_save\n[工艺存盘] ^c^csave_inf\n[工艺装入] ^c^cload_inf\n[->刀具管理]\n《创建新刀》 ^c^ccreate_new_tool\n[<-刀库增删] ^c^ctool_manage\n";
DWORD dwWrite=0;
BRet=WriteFile(hfile, szBuf, Lstrlen(szBuf), &dwWrite, NULL);
If (!bRet) Printerror();
}
CloseHandle(hfile);
}

上述操作中用CreateFile函数打开文件,SetFilePointer函数将指针移至文件末尾,字符串数组szBuf中装有欲添加的内容,以WriteFile函数写入,PrintError为自编的错误处理函数。

以同样的方法可以找到acad2000doc.lsp文件并添入内容。

以下操作将创建一个名为“C:\hkcam”的子目录,并将事先准备好的本程序所在目录下的所有文件拷贝进去:

Cstring nam1, nam2;
BOOL bCreate=CreateDirectory("C:\\hkcam", NULL);//创建子目录
CfileFind finder; //创建类对象
BOOL b Working=finder.FindFile("*.*");//利用类函数搜索所有文件
While(b Working)//循环搜索及文件拷贝
{
b Working=finder.FindNextFile();
nam1= finder.GetFileName();//获得文件名 #p#分页标题#e#
nam2= " c:\\hkcam\\";
nam2=nam2+nam1;//组成全路径
BOOL bCopy=CopyFile(nam1, nam2, FALSE);//文件拷贝
}

所有操作成功后,以信息框告知:

MessageBox( NULL,“安装成功,请按OK钮继续”,“安装结果”,MB_OK);

整个程序以MFC静态链接库创建。上述所有内容可以写入一个源文件内,这里称其为Append.cpp。为使最终执行文件尽可能小,应删去程序框架中所有不需要的内容。为此,源文件中只保留Append.cpp,Append.rc,及StdAfx.cpp几项;而头文件中只有Append.h, Resource.h,及StdAfx.h几项。所定义的唯一派生类为class CappendApp:public CwinApp,置于Append.h之内。

三、结束语

在VC++环境下利用有关WINDOWS系统注册表操作函数获得AutoCAD系统的安装路径,从而找出并改写AutoCAD有关文件;创建子目录并拷入各种二次开发形成文件,由此实现了AutoCAD二次开发程序与AutoCAD系统的自动衔接与嵌入。文中程序已由实践验证,完全可用于AutoCAD二次开发程序的自动安装。
模具之家为您提供最全面的塑胶,塑料,模具,模具设计,塑胶模具品牌的装修知识点和各种塑胶模具的导购与在线购买服务,拥有最便宜的塑胶模具价格和最优质的售后服务,敬请登陆模具之家:http://muju.jc68.com/
更多»您可能感兴趣的文章:
更多»有关 塑料 的产品:
南亚塑胶洛阳总经销 PVC塑料管

南亚塑胶洛阳总经销 PVC塑料管

价格:10.00/米

深圳 南亚 耐酸碱 PVC管道 pp管 PVC管 塑料管

深圳 南亚 耐酸碱 PVC管道 pp管 PVC管 塑料管

价格:3.00/米

LED封装塑料导热专用纳米氧化镁

LED封装塑料导热专用纳米氧化镁

价格:到店咨询

塑料专用纳米氧化铝

塑料专用纳米氧化铝

价格:到店咨询

联塑PE钢丝网骨架塑料(聚乙烯)复合管

联塑PE钢丝网骨架塑料(聚乙烯)复合管

价格:1.00/米

塑料光纤连接器

塑料光纤连接器

价格:7.50/个

易博仕铝方通吊顶木纹铝方通厂家直销

易博仕铝方通吊顶木纹铝方通厂家直销

价格:7.50/米

易博仕勾搭式垂帘铝挂片吊顶天花

易博仕勾搭式垂帘铝挂片吊顶天花

价格:8.50/米

供应易博仕氟碳铝单板幕墙铝单板厂家直销

供应易博仕氟碳铝单板幕墙铝单板厂家直销

价格:198.00/平方米

供应易博仕氟碳铝单板幕墙铝单板厂家直销

供应易博仕氟碳铝单板幕墙铝单板厂家直销

价格:198.00/平方米

易博仕铝天花吊顶明架跌级铝扣板600*600厂家直销

易博仕铝天花吊顶明架跌级铝扣板600*600厂家直销

价格:38.00/平方米

供应易博仕c型铝条扣 防风铝条扣天花厂家直销

供应易博仕c型铝条扣 防风铝条扣天花厂家直销

价格:38.00/平方米

  • 头条资讯
  • 发表评论 | 0评
  • 评论登陆
  • 移动社区 建材风水 木板之家 电工之家 壁纸之家 净化之家 安防之家 水暖之家 洁具之家 窗帘头条 家饰之窗 老姚之家 灯饰之家 电气之家 全景头条 陶瓷之家 照明之家 防水之家 防盗之家 博一建材 卫浴之家 区快洞察 建材 郑州建材 周口建材 信阳建材 商丘建材 南阳建材 漯河建材 许昌建材 濮阳建材 焦作建材 新乡建材 鹤壁建材 安阳建材 洛阳建材 开封建材 武汉建材 天门建材 企业之家 驻马店建材 三门峡建材 平顶山建材 神农架建材 建材之家 720全景
    (c)2015-2017 BO-YI.COM SYSTEM All Rights Reserved