AuToCAD启动自定义加载程序研究(转)
2009年06月02日 星期二 下午 12:28
CAD文件加载顺序: acad2006.lsp (AutoCAD使用) acad.rx (用户自定义的*.arx文件加载清单) 注:在CAD2006中,由错误提示怀疑:*.arx文件检测先于acad2006.lsp加载。 acad.lsp (用户自定义的Lsp自动加载程序) acad2006doc.lsp (AutoCAD使用) acetutil.fas (Express Tools初始化程序) acaddoc.lsp (用户自定义的Lsp自动加载程序) mymenu.mnc (用户自定义或第三方编译菜单文件) mymenu.mnl (用户自定义或第三方菜单文件) acad.mnc (AutoCAD编译菜单文件) acad.mnl (AutoCAD菜单文件) acetmain.mnc (Express Tools编译菜单文件) acetmain.mnl (Express Tools菜单) 使用“对话框方式”加载的文件 s::startup (自动执行函数,可用于自定义状态栏等)
注册表法加载顺序未知。
注意: 1.如果acad.lsp、acaddoc.lsp或MNL文件中包含自定义函数S::STARTUP,那么,创建新图形或打开现有图形时就会调用这个函数。因此,在 LISP启动文件中添加S::STARTUP函数定义,就可以执行全部所需的安装操作。如果需要关于“S::STARTUP”函数的详细信息,请参阅“AutoCAD 2000 Customization Guide”的第六章。
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 同名函数(或命令)被最后加载的版本覆盖。 知道AutoCAD 2000启动时各个文件加载的顺序,可能就会明白一个文件对另一个文件的影响。例如,已经在从acad.lsp文件加载的LISP程序中定义了一个函数,但是在启动AutoCAD 2000后,这个函数却不工作。这是因为acaddoc.lsp是在acad.lsp文件之后加载,此函数已经被acaddoc.lsp文件重新定义了。
l 加载的dll文件同名但dll里的函数不同名,dll不会相互覆盖。 acad.lsp或acaddoc.lsp文件内容: (defun S::STARTUP() ;函数名不可以改变 (command "_netload" "my.dll"); my.dll为相对路径也可用绝对路径 或:(load “1111.lsp”)在1111.lsp文件中调用my.dll。
b.修改AutoCAD 2006\Support\acad2006.lsp或cad2006doc.lsp文件,里面加入加载代码。(加载代码同上。)
c.修改你的菜单组对应的同名的MNL文件,里面加入加载代码。 MNL文件其实是一种与菜单同名,扩展名为MNL的LISP文件。它随同名菜单加载。 acad.mnl的位置:C:\Documents and Settings\用户名\Application Data\Autodesk 缺点: a.可能被其他第三方程序修改时覆盖。 b.如果使用acad.lsp,新建文档时出现:“是否读入每个图形时都加载“acad.lsp”的提示。 "NumStartup"="1" //启动组加载的项目数 //数字1表示在cad中加载的顺序,后面是加载文件的路径。 注意: a.此方法在CAD2006以下版本中,只能加载lisp、VBA、arx等,不能加载dll。但可通过lisp间接加载dll。 b.此方法每次打开一个新的文档就会自动加载启动组中指定的文件。 c.(网友发言)加到启动组里面有时候不能加载,尤其是打开新图的时候。
-------------------------------------------------------------------------------------------------------------------- 在注册表加入如下项值: [HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R16.2\ACAD-4001:804\Applications\my] "MANAGED"=dword:00000001 "LOADER"="C:\\Program Files\\AutoCAD 2006\\my.dll" "LOADCTRLS"=dword:00000002 "DEION"="my"
b. 注册表键值"LOADCTRLS"控制说明,控制ARX程序的加载方式 0x01:Load the application upon detection of proxy object. 0x02:Load the application upon AutoCAD startup. 0x04:Load the application upon invocation of a command. 0x08:Load the application upon request by the user or another application. 0x10:Do not load the application. 0x20:Load the application transparently.
c. 当my。dll中有命令时,还需要添加一个子键: [HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R16.2\ACAD-4001:804\Applications\my\Commands] "StartmyApp"="StartmyApp" -StartmyApp 是你程序中一个有效的命令。
这样,你的程序就会在AutoCAD 启动时加载并初始化。你可以添加代码到程序的如下地方(VB.Net代码): Public Sub StartmyApp() ..... End Sub
然后在ACAD.LSP, ACAD.MNL, 或其他自动载入的文件里调用StartmyApp命令。
优点:只要项键值不同就不会被覆盖,所以建议键名使用gid。
5.ACAD.RX文件法:在AutoCAD 启动文件acad.rx 中指定待装入的ARX 应用程序名。acad.rx 是ASCII 文本文件,每个ARX 应用程序必须单独占一行,AutoCAD 启动时会自动装载该文件中的ARX 应用程序。另外,应确保$ACAD 路径定义中包括文件acad.rx 的存放目录。
6.配置文件法:可以把自己配置的AUTOCAD启动时加载的东西,保存成一个的配置文件。然后在AUTOCAD启动快捷方式中用参数: /p 你的配置文件名。这样就可以在启动的时候加载自己的CAD环境。 |