CAD启动时自动加载程序的研究.docx
- 文档编号:26304021
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:9
- 大小:19.11KB
CAD启动时自动加载程序的研究.docx
《CAD启动时自动加载程序的研究.docx》由会员分享,可在线阅读,更多相关《CAD启动时自动加载程序的研究.docx(9页珍藏版)》请在冰豆网上搜索。
CAD启动时自动加载程序的研究
CAD启动时自动加载程序的研究
CAD文件加载顺序:
aCAD2006.lsp(AutoCAD使用)acad.rx(用户自定义的*.arx文件加载清单)
注:
在CAD2006中,由错误提示怀疑:
*.arx文件检测先于acad2006.lsp加载。
acad.lsp(用户自定义的Lsp自动加载程序)
acad2006doc.lsp(AutoCAD使用)
acetutil.fas(ExpressTools初始化程序)
acaddoc.lsp(用户自定义的Lsp自动加载程序)
mymenu.mnc(用户自定义或第三方编译菜单文件)
mymenu.mnl(用户自定义或第三方菜单文件)
acad.mnc(AutoCAD编译菜单文件)
acad.mnl(AutoCAD菜单文件)
acetmain.mnc(ExpressTools编译菜单文件)
acetmain.mnl(ExpressTools菜单)
使用“对话框方式”加载的文件
s:
:
stARTup(自动执行函数,可用于自定义状态栏等)
注册表法加载顺序未知。
注意:
1.如果acad.lsp、acaddoc.lsp或MNL文件中包含自定义函数S:
:
STARTUP,那么,创建新图形或打开现有图形时就会调用这
个函数。
因此,在LISP启动文件中添加S:
:
STARTUP函数定义,就可以执行全部所需的安装操作。
如果需要关于“S:
:
STARTUP”函数的详细信息,请参阅“AutoCAD2000CustomizationGuide”的第六章。
2.默认情况下,acad.lsp仅在启动AutoCAD时加载一次,而aCADdoc.lsp可随每个文档(或图形)一起加载。
这样可使用户将加载acad.lsp文件和启动应用程序相关联,将acaddoc.lsp文件和文档或图形启动相关联。
通过更改ACADLSPASDOC系统变量的设置,可以修改加载这些启动文件的默认方法。
在CAD2006中,第一次新建图形时,也会出现对话框询问:
acad.lsp是仅在启动AutoCAD时加载一次,还是随每个文档(或图形)一起加载。
不同位置的acad.lsp和acaddoc.lsp按如下顺序加载:
CAD安装目录(即:
acad.exe所在文件夹)
“支持文件搜索路径”所包含的文件夹的逆序加载
Dwg文件所在文件夹(打开Dwg文件时加载)
有关同名覆盖的问题:
l同名文件被最后加载的版本覆盖。
比如:
你定义了一系列自己编制的lisp程序并放在acad.lsp文件中,但该acad.lsp放在CAD安装目录中。
当“支持文件搜索路径”所包含的文件夹中,由于未知原因出现了一个与你自定义的acad.lsp文件不同的acad.lsp文件时,你自定义的acad.lsp文件就不会被加载。
解决的办法是将后加载的acad.lsp文件删除或用
自己定义的acad.lsp替换放后加载的aCAD.lsp文件,或将自己定义的acad.lsp放在更靠后加载的目录中。
l同名函数(或命令)被最后加载的版本覆盖。
知道AutoCAD2000启动时各个文件加载的顺序,可能就会明白一个文件对另一个文件的影响。
例如,已经在从acad.lsp文件加载的LISP程序中定义了一个函数,但是在启动AutoCAD2000后,这个函数却不工作。
这是因为acaddoc.lsp是在acad.lsp文件之后加载,此函数已经被acaddoc.lsp文件重新定义了。
l加载的dll文件同名但dll里的函数不同名,dll不会相互覆盖。
---------------------------------------------------------------------------------------------------------------------
关于CAD启动时自动加载程序的研究
(二)
1.Lisp法:
a.在ACAD.EXE所在目录加入acad.lsp或acaddoc.lspacad.lsp或acaddoc.lsp文件内容:
(defunS:
:
STARTUP();函数名不可以改变
(command"_netload""my.dll");my.dll为相对路径也可用绝对路径
)
或:
(load“1111.lsp”)在1111.lsp文件中调用my.dll。
b.修改AutoCAD2006\Support\aCAD2006.lsp或CAD2006do
c.lsp文件,里面加入加载代码。
(加载代码同上。
)
c.修改你的菜单组对应的同名的MNL文件,里面加入加载代码。
MNL文件其实是一种与菜单同名,扩展名为MNL的LISP文件。
它随同名菜单加载。
acad.mnl的位置:
C:
\DocumentsandSettings\用户名
\ApplicationData\Autodesk
\AutoCAD2006\R16.2\chs\Support\acad.mnl
缺点:
a.可能被其他第三方程序修改时覆盖。
b.如果使用acad.lsp,新建文档时出现:
“是否读入每个图形时都加载“acad.lsp”的提示。
2.对话框方式:
a。
菜单:
工具->加载应用程序,(或用命令:
_APPLOAD)
b。
启动组:
“内容”按钮,
c。
“添加”按钮
等同于如下注册表操作:
[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R16.2\ACAD-4001:
804\Profiles\<<未命名配
置>>\Dialogs\Appload\StARTup]
"NumStARTup"="1"//启动组加载的项目数
"1StARTup"="C:
\\ProgramFiles\\AutoCAD2006\\222.lsp"
//数字1表示在CAD中加载的顺序,后面是加载文件的路径。
注意:
a.此方法在CAD2006以下版本中,只能加载lisp、VBA、arx等,不能加载dll。
但可通过lisp间接加载dll。
b.此方法每次打开一个新的文档就会自动加载启动组中指定的文件。
c.(网友发言)加到启动组里面有时候不能加载,尤其是打开新图的时候。
--------------------------------------------------------------------------------------------------------------------
3.注册表法:
(注意:
检查LOADER的路径是否正确)
在注册表加入如下项值:
[HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R16.2\ACAD-4001:
804\Applications\my]
"MANAGED"=dword:
00000001
"LOADER"="C:
\\ProgramFiles\\AutoCAD2006\\my.dll""LOADCTRLS"=dword:
00000002"DEion"="my"
说明:
a.非托管的ARX程序是指用C++编译的以.arx为后缀的动态链接库文件;托管的ARX程序是指由.net程序(C#,C++.net或VB.net)编译的以.dll为后缀的动态链接库文件。
托管的程序和非托管的程序相比,只要多创建一个“MANAGED”键,并设为Ox01,告诉CAD这是托管程序即可。
VBA,lisp的注册表加载法参见“2.对话框方式”。
b.注册表键值"LOADCTRLS"控制说明,控制ARX程序的加载方式
0x01:
Loadtheapplicationupondetectionofproxyobject.
当代理对像被控知时另载相应ARX程序.
0x02:
LoadtheapplicationuponAutoCADstARTup.
当AutoCAD启动时加载相应ARX程序.
0x04:
Loadtheapplicationuponinvocationofacommand.
当输入命令时加载相应ARX程序.
0x08:
Loadtheapplicationuponrequestbytheuseroranotherapplication.
当有用户或别的程序请求时加载相应ARX程序.
0x10:
Donotloadtheapplication.
从不加载该应用程序.
0x20:
Loadtheapplicationtransparently.
显式加载该应该程序.(不知该项译法是否有误)
c.当my。
dll中有命令时,还需要添加一个子键:
[HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R16.2\ACAD-4001:
804\Applications\my\Commands]"StARTmyApp"="StARTmyApp"
-StartmyApp是你程序中一个有效的命令。
这样,你的程序就会在AutoCAD启动时加载并初始化。
你可以添加代码到程序的如下地方(VB.Net代码):
PublicSubStartmyApp()
.....
EndSub
然后在acad.lsp,ACAD.MNL,或其他自动载入的文件里调用StartmyApp命令。
优点:
只要项键值不同就不会被覆盖,所以建议键名使用gid。
---------------------------------------------------------------------------------------------------------------------
于CAD启动时自动加载程序的研究(四)
4.子进程法:
将二次开发的程序做成EXE程序。
启动该程序会自动启动CAD子进程,关闭程序时可以关闭CAD子进程。
5.ACAD.RX文件法:
在AutoCAD启动文件acad.rx中指定待装入的ARX应用程序名。
acad.rx是ASCII文本文件,每个ARX应用程序必须单独占一行,AutoCAD启动时会自动装载该文件
中的ARX应用程序。
另外,应确保$ACAD路径定义中包括文件aCAD.rx的存放目录。
6.配置文件法:
可以把自己配置的AUTOCAD启动时加载的东西,保存成一个的配置文件。
然后在AUTOCAD启动快捷方式中用参数:
/p你的配置文件名。
这样就可以在启动的时候加载自己的CAD环境。
具体如下:
菜单:
工具--选项(或用命令:
_OPTionS),“配置”选项卡,选择配置文件后,点击“输出”。
可以输出一个扩展名为arg的文本文件,保存到某个位置,然后再桌面上将cad的快捷方式复制一个,右键属性,将目标中"C:
\\MyPrograms\\AutoCAD\\acad.exe"的后面加上/p"d:
/test/test.arg"(注意:
双引号,不是汉字的,而是英文的!
)
有些命令要求:
将加载的文件的路径,加入搜索路径。
方法如下:
加入搜索路径:
菜单:
工具->选项,(或用命令:
_OPTionS)选中“支持文件搜索路径”,点“添加”,点“浏览”,选择要添加的路径,点“确定”。
等同于如下注册表操作:
注意需要先关闭CAD
[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R16.2\ACAD-4001:
804\Profiles\<<未命名配置>>\General]
"ACAD"="C:
\\DocumentsandSettings\\用户名\\ApplicationData\\Autodesk\\AutoCAD
2006\\R16.2\\chs\\support;C:
\\ProgramFiles\\AutoCAD
2006\\support;C:
\\ProgramFiles\\AutoCAD
2006\\fonts;C:
\\ProgramFiles\\AutoCAD
2006\\help;C:
\\ProgramFiles\\AutoCAD
2006\\Express;C:
\\ProgramFiles\\AutoCAD
2006\\support\\color;C:
\\ProgramFiles\\AutoCAD
2006\\myfile;"
注意:
此法每次打开一个新的文档就会自动加载注册表中指定的文件。
--------------------------------------------------------------------------------------------------------------------
关于CAD启动时自动加载程序的研究(五)
附:
CAD加载命令:
appload(加载VBA,Arx,Lisp),netload(加载dll),arxload(加载Arx),load(加载Lisp),autoload(加载Lisp),autoarxload(加载Arx)
加载二次开发线程的方法:
loadDVB(加载VBA的方法)和loadARX(加载ARX的方法)
用acrxLoadModule()或AcRxDynamicLinker:
:
loadModule()函数,在一个ARX应用程序里装载另一个ARX应用程序。
这两个函数的原型是:
----intacrxLoadModule(char*moduleName,intprintit);
----virtualAdesk:
:
BooleanAcRxDynamicLinker:
:
loadModule(char*fileName,intprintIt)=0;
----其中各参数含义如下:
----moduleName:
待装载的ARX应用程序名;ARX应用程序扩展名默认为.ARX,如果不是.ARX,则此处char*moduleName参数必须包括应用程序扩展名。
----fileName:
含义与上述moduleName相同。
但是fileName必须包括待装载的ARX应用程序的路径和扩展名。
----printit:
取0则不显示装载结果,取非0值则显示。
当printit取非0值时,如装载成功,则在AutoCAD命令窗口显示“RuntimeExtensionisalreadyloaded.\",否则,显示“AcRxDynamicLinkerfailedtoload\"。
----acrxLoadModule()与AcRxDynamicLinker:
:
loadModule不同的是:
acrxLoadModule()从$ACAD定义的AutoCAD搜索路径自动搜索待装载的ARX应用程序,并默认ARX应用程序扩展名为.ARX。
intads_arxload(constchar*ArxAppName)函数。
在ADS或ARX程序里使用
该函数可将一个ARX模块装载到相应的ADS或ARX程序里。
该函数的返回值表示装载结果。
与该函数对应的AutoLISP函数是(arxload)。
用ads_arxload()和acrxLoadModule()装入一个ARX应用程序的区别是:
用ads_arxload()装入的ARX应用程序不仅注册成一个ADS程序,同时还注册成一个ARX程序。
--------------------------------------------------------------------------------------------------------------------
关于CAD启动时自动加载程序的研究(六)
菜单的加载:
AutoCAD启动时将自动加载默认的基本菜单文件“acad.mnu”,其默认路径可在“工具→选项→文件→工作支持文件搜索路径”中查看。
其中,后缀为mnu的是原始ASCII菜单文件,mnc是已编译的菜单文件,mns是源菜单文件。
AutoCAD启动时会在默认路径中按mns→mnc→mnu的顺序依次查找,找到任何一类文件都可生成mnc文件并加载。
如这些文件均未找到,将弹出上述信息窗口。
按“确定”进入AutoCAD后工具栏就丢失了,而且相应菜单中没有恢复工具栏的功能。
但此时命令行还可以使用,只需要输入“menu”命令,就会弹出一个“选择菜单文件”窗口,找到上述任何一类菜单文件打开即可恢复工具栏。
如果文件损坏或被删除,可以从其它AutoCAD运行正常的计算机上拷贝一个菜单文件按同样的方法加载。
当然还可以把可正常使用的菜单文件拷贝到默认路径下,这样AutoCAD将自动加载
而不用我们手动设置,此时可用“options”命令进入“选项”窗口查看默认路径。
在加载自定义菜单时,如果通过MENU加载,就会把aCAD.cui赶跑了。
如果想保留acad.cui(CAD默认菜单),应该用MENULOAD来加载(局部加载),这样两个菜单都在,如果不用了,也可以通过这个命令来卸载。
用了之后如果不卸载,退出cad之后下次启动还会加载自定义菜单。
怎样在AutoCAD2006加载自定义菜单文件?
问题:
我想在AutoCAD2006加载自定义菜单文件,不改变acad.cui的原有菜单只是在其后加一栏菜单(在"帮助"菜单POP12后加"自定义"菜单POP13)
回答:
你可以用写字板程序打开acad.MNU文件,然后按照其格式把POP13的内容写进去,存盘后,重新启动ACAD就行了。
如果还不行,就在启动ACAD后键入命令MENU,然后根据提示选择ACAD.MNU。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CAD 启动 自动 加载 程序 研究