acDocManager->sendStringToExecute(acDocManager->curDocument(),_T("tonsel\n"),false,true);
CAD文件加載順序: acad2006.lsp (AutoCAD使用)
acad.rx (用戶自定義的*.arx文件加載清單)
注:在CAD2006中,由錯(cuò)誤提示懷疑:*.arx文件檢測(cè)先于acad2006.lsp加載。
acad.lsp (用戶自定義的Lsp自動(dòng)加載程序)
acad2006doc.lsp (AutoCAD使用)
acetutil.fas (Express Tools初始化程序)
acaddoc.lsp (用戶自定義的Lsp自動(dòng)加載程序)
mymenu.mnc (用戶自定義或第三方編譯菜單文件)
mymenu.mnl (用戶自定義或第三方菜單文件)
acad.mnc (AutoCAD編譯菜單文件)
acad.mnl (AutoCAD菜單文件)
acetmain.mnc (Express Tools編譯菜單文件)
acetmain.mnl (Express Tools菜單)
使用“對(duì)話框方式”加載的文件
s::startup (自動(dòng)執(zhí)行函數(shù),可用于自定義狀態(tài)欄等)
注冊(cè)表法加載順序未知。
注意:
1.如果acad.lsp、acaddoc.lsp或MNL文件中包含自定義函數(shù)S::STARTUP,那么,創(chuàng)建新圖形或打開現(xiàn)有圖形時(shí)就會(huì)調(diào)用
這個(gè)函數(shù)。因此,在
LISP啟動(dòng)文件中添加S::STARTUP函數(shù)定義,就可以執(zhí)行全部所需的安裝操作。如果需要關(guān)于“S::STARTUP”函數(shù)的詳細(xì)信息,請(qǐng)參閱
“AutoCAD 2000 Customization Guide”的第六章。
2.默認(rèn)情況下,acad.lsp 僅在啟動(dòng) AutoCAD 時(shí)加載一次,而 acaddoc.lsp
可隨每個(gè)文檔(或圖形)一起加載。這樣可使用戶將加載 acad.lsp 文件和啟動(dòng)應(yīng)用程序相關(guān)聯(lián),將 acaddoc.lsp
文件和文檔或圖形啟動(dòng)相關(guān)聯(lián)。通過更改 ACADLSPASDOC
系統(tǒng)變量的設(shè)置,可以修改加載這些啟動(dòng)文件的默認(rèn)方法。在CAD2006中,第一次新建圖形時(shí),也會(huì)出現(xiàn)對(duì)話框詢問:acad.lsp是僅在啟動(dòng)
AutoCAD 時(shí)加載一次,還是隨每個(gè)文檔(或圖形)一起加載。
不同位置的acad.lsp 和acaddoc.lsp按如下順序加載: CAD安裝目錄(即:acad.exe所在文件夾)
“支持文件搜索路徑”所包含的文件夾的逆序加載
Dwg文件所在文件夾(打開Dwg文件時(shí)加載)
有關(guān)同名覆蓋的問題:l 同名文件被最后加載的版本覆蓋。
比如:你定義了一系列自己編制的lisp程序并放在acad.lsp文件中,但該acad.lsp放在CAD安裝目錄中。當(dāng)“支持文件搜索路徑”所
包含的文件夾中,由于未知原因出現(xiàn)了一個(gè)與你自定義的acad.lsp文件不同的acad.lsp文件時(shí),
你自定義的acad.lsp文件就不會(huì)被加載。解決的辦法是將后加載的acad.lsp文件刪除或用自己定義的acad.lsp替換放后加載的
acad.lsp文件,或?qū)⒆约憾x的acad.lsp放在更靠后加載的目錄中。
l 同名函數(shù)(或命令)被最后加載的版本覆蓋。
知道AutoCAD
2000啟動(dòng)時(shí)各個(gè)文件加載的順序,可能就會(huì)明白一個(gè)文件對(duì)另一個(gè)文件的影響。例如,已經(jīng)在從acad.lsp文件加載的LISP程序中定義了一個(gè)函數(shù),
但是在啟動(dòng)AutoCAD
2000后,這個(gè)函數(shù)卻不工作。這是因?yàn)閍caddoc.lsp是在acad.lsp文件之后加載,此函數(shù)已經(jīng)被acaddoc.lsp文件重新定義了。
l 加載的dll文件同名但dll里的函數(shù)不同名,dll不會(huì)相互覆蓋。
---------------------------------------------------------------------------------------------------------------------
關(guān)
于CAD啟動(dòng)時(shí)自動(dòng)加載程序的研究(二)
1.Lisp法:a.在ACAD.EXE所在目錄加入acad.lsp或acaddoc.lsp
acad.lsp或acaddoc.lsp文件內(nèi)容:
(defun S::STARTUP() ;函數(shù)名不可以改變
(command "_netload" "my.dll"); my.dll為相對(duì)路徑也可用絕對(duì)路徑
)
或:(load “1111.lsp”)在1111.lsp文件中調(diào)用my.dll。
b.修改AutoCAD
2006\Support\acad2006.lsp或cad2006doc.lsp文件,里面加入加載代碼。(加載代碼同上。)
c.修改你的菜單組對(duì)應(yīng)的同名的MNL文件,里面加入加載代碼。
MNL文件其實(shí)是一種與菜單同名,擴(kuò)展名為MNL的LISP文件。它隨同名菜單加載。
acad.mnl的位置:C:\Documents and Settings\用戶名\Application Data\Autodesk
\AutoCAD
2006\R16.2\chs\Support\acad.mnl
缺點(diǎn):
a.可能被其他第三方程序修改時(shí)覆蓋。
b.如果使用acad.lsp,新建文檔時(shí)出現(xiàn):“是否讀入每個(gè)圖形時(shí)都加載“acad.lsp”的提示。
2.對(duì)話框方式:
a。菜單:工具->加載應(yīng)用程序,(或用命令:_APPLOAD)
b。啟動(dòng)組:“內(nèi)容”按鈕,
c。“添加”按鈕
等
同于如下注冊(cè)表操作:[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R16.2\ACAD-
4001:804\Profiles\<<未命名配置>>\Dialogs\Appload\Startup]
"NumStartup"="1" //啟動(dòng)組加載的項(xiàng)目數(shù)
"1Startup"="C:\\Program
Files\\AutoCAD 2006\\222.lsp"
//數(shù)字1表示在cad中加載的順序,后面是加載文件的路徑。
注意:
a.此方法在CAD2006以下版本中,只能加載lisp、VBA、arx等,不能加載dll。但可通過lisp間接加載dll。
b.此方法每次打開一個(gè)新的文檔就會(huì)自動(dòng)加載啟動(dòng)組中指定的文件。
c.(網(wǎng)友發(fā)言)加到啟動(dòng)組里面有時(shí)候不能加載,尤其是打開新圖的時(shí)候。
--------------------------------------------------------------------------------------------------------------------
3.
注冊(cè)表法:(注意:檢查L(zhǎng)OADER的路徑是否正確)
在注冊(cè)表加入如下項(xiàng)值:
[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"
說明:
a.
非托管的ARX程序是指用C++編譯的以.arx為后綴的動(dòng)態(tài)鏈接庫文件;托管的ARX程序是指由.net程序(C#,C++.net或VB.net)編
譯的以.dll為后綴的動(dòng)態(tài)鏈接庫文件。托管的程序和非托管的程序相比,只要多創(chuàng)建一個(gè)“MANAGED”鍵,并設(shè)為Ox01,告訴CAD這是托管程序即
可。VBA,lisp的注冊(cè)表加載法參見“2. 對(duì)話框方式”。
b. 注冊(cè)表鍵值"LOADCTRLS"控制說明,控制ARX程序的加載方式
0x01:Load the application upon detection of proxy object.
當(dāng)代理對(duì)像
被控知時(shí)另載相應(yīng)ARX程序.
0x02:Load the application upon AutoCAD startup.
當(dāng)AutoCAD啟動(dòng)時(shí)加載相應(yīng)
ARX程序.
0x04:Load the application upon invocation of a command.
當(dāng)輸入命令時(shí)加
載相應(yīng)ARX程序.
0x08:Load the application upon request by the user or another
application.
當(dāng)有用戶或別的程序請(qǐng)求時(shí)加載相應(yīng)ARX程序.
0x10:Do not load the application.
從不加載該應(yīng)用程序.
0x20:Load the application transparently.
顯式加載該應(yīng)該程序.(不知該項(xiàng)譯法是否有誤)
c. 當(dāng)my。dll中有命令時(shí),還需要添加一個(gè)子鍵:
[HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R16.2\ACAD-4001:804\Applications\my\Commands]
"StartmyApp"="StartmyApp"
-StartmyApp 是你程序中一個(gè)有效的命令。
這樣,你的程序就會(huì)在AutoCAD 啟動(dòng)時(shí)加載并初始化。你可以添加代碼到程序的如下地方(VB.Net代碼):
Public Sub StartmyApp()
.....
End Sub
然后在ACAD.LSP, ACAD.MNL, 或其他自動(dòng)載入的文件里調(diào)用StartmyApp命令。
優(yōu)點(diǎn):只要項(xiàng)鍵值不同就不會(huì)被覆蓋,所以建議鍵名使用gid。
---------------------------------------------------------------------------------------------------------------------
于
CAD啟動(dòng)時(shí)自動(dòng)加載程序的研究(四)
4.子進(jìn)程法:將二次開發(fā)的程序做成EXE程序。啟動(dòng)該程序會(huì)自動(dòng)啟動(dòng)CAD子進(jìn)程,關(guān)閉程序時(shí)可以關(guān)閉
CAD子進(jìn)程。
5.ACAD.RX文件法:在AutoCAD 啟動(dòng)文件acad.rx 中指定待裝入的ARX 應(yīng)用程序名。acad.rx 是ASCII
文本文件,每個(gè)ARX 應(yīng)用程序必須單獨(dú)占一行,AutoCAD 啟動(dòng)時(shí)會(huì)自動(dòng)裝載該文件中的ARX 應(yīng)用程序。另外,應(yīng)確保$ACAD
路徑定義中包括文件acad.rx 的存放目錄。
6.配置文件法:可以把自己配置的AUTOCAD啟動(dòng)時(shí)加載的東西,保存成一個(gè)的配置文件。然后在AUTOCAD啟動(dòng)快捷方式中用參數(shù): /p
你的配置文件名。這樣就可以在啟動(dòng)的時(shí)候加載自己的CAD環(huán)境。
具體如下:菜單:工具--選項(xiàng)(或用命令:_OPTIONS),“配置”選項(xiàng)卡,選擇配置文件后,點(diǎn)擊“輸出”。可以輸出一個(gè)擴(kuò)展名為
arg的文本文件,保存到某個(gè)位置,然后再桌面上將cad 的快捷方式復(fù)制一個(gè),右鍵屬性,將目標(biāo)中"C:\\My Programs\\Auto
CAD\\acad.exe"的后面加上/p "d:/test/test.arg" (注意:雙引號(hào),不是漢字的,而是英文的!)
有些命令要求:將加載的文件的路徑,加入搜索路徑。方法如下:
加入搜索路徑:菜單:工具->選項(xiàng),(或用命令:_OPTIONS)
選中“支持文件搜索路徑”,點(diǎn)“添加”,點(diǎn)“瀏覽”,選擇要添加
的路徑,點(diǎn)“確定”。
等同于如下注冊(cè)表操作:注意需要先關(guān)閉CAD
[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R16.2\ACAD-4001:804
\Profiles\<<未命名配置>>\General]
"ACAD"="C:\\Documents and Settings\\用戶名\\Application
Data\\Autodesk\\AutoCAD 2006\\R16.2\\chs\\support;C:\\Program
Files\\AutoCAD 2006\\support;C:\\Program Files\\AutoCAD
2006\\fonts;C:\\Program Files\\AutoCAD 2006\\help;C:\\Program
Files\\AutoCAD 2006\\Express;C:\\Program Files\\AutoCAD
2006\\support\\color;C:\\Program Files\\AutoCAD 2006\\myfile;"
注意:此法每次打開一個(gè)新的文檔就會(huì)自動(dòng)加載注冊(cè)表中指定的文件。
--------------------------------------------------------------------------------------------------------------------
關(guān)
于CAD啟動(dòng)時(shí)自動(dòng)加載程序的研究(五)
附: CAD加載命令:appload (加載VBA,Arx,Lisp),
netload(加載dll),arxload(加載Arx),load(加載Lisp),autoload(加載
Lisp),autoarxload(加載Arx)
加載二次開發(fā)線程的方法:loadDVB(加載VBA的方法)和loadARX(加載ARX的方法)
用acrxLoadModule() 或AcRxDynamicLinker::loadModule() 函數(shù),在一個(gè)ARX
應(yīng)用程序里裝載另一個(gè)ARX 應(yīng)用程序。這兩個(gè)函數(shù)的原型是:
---- int acrxLoadModule(char * moduleName, int printit);
---- virtual Adesk::Boolean AcRxDynamicLinker::loadModule (char *
fileName, int printIt) = 0;
---- 其中各參數(shù)含義如下:
---- moduleName:待裝載的ARX 應(yīng)用程序名;ARX 應(yīng)用程序擴(kuò)展名默認(rèn)為.ARX,如果不是.ARX,則此處char *
moduleName 參數(shù)必須包括應(yīng)用程序擴(kuò)展名。
---- fileName:含義與上述moduleName 相同。但是fileName 必須包括待裝載的ARX 應(yīng)用程序的路徑和擴(kuò)展名。
---- printit:取0 則不顯示裝載結(jié)果,取非0 值則顯示。當(dāng)printit 取非0 值時(shí),如裝載成功,則在AutoCAD
命令窗口顯示“Runtime Extension is already loaded.\",否則,顯示“AcRxDynamicLinker
failed to load \"。
---- acrxLoadModule() 與AcRxDynamicLinker::loadModule
不同的是:acrxLoadModule() 從$ACAD 定義的AutoCAD 搜索路徑自動(dòng)搜索待裝載的ARX 應(yīng)用程序,并默認(rèn)ARX
應(yīng)用程序擴(kuò)展名為.ARX。
int ads_arxload(const char *ArxAppName) 函數(shù)。在ADS 或ARX 程序里使用
該函數(shù)可將一個(gè)ARX 模塊裝載到相應(yīng)的ADS 或ARX 程序里。該函數(shù)的返回值表示裝載結(jié)果。與該函數(shù)對(duì)應(yīng)的AutoLISP
函數(shù)是(arxload)。
用ads_arxload() 和acrxLoadModule() 裝入一個(gè)ARX 應(yīng)用程序的區(qū)別是:用ads_arxload()
裝入的ARX 應(yīng)用程序不僅注冊(cè)成一個(gè)ADS 程序,同時(shí)還注冊(cè)成一個(gè)ARX 程序。
--------------------------------------------------------------------------------------------------------------------
關(guān)
于CAD啟動(dòng)時(shí)自動(dòng)加載程序的研究(六)
菜單的加載:AutoCAD啟動(dòng)時(shí)將自動(dòng)加載默認(rèn)的基本菜單文件“acad.mnu
”,其默認(rèn)路徑可在“工具→選項(xiàng)→文件→工作支持文件搜索路徑”中查看。
其中,后綴為mnu的是原始 ASCII 菜單文件,mnc是已編譯的菜單文件,mns是源菜單文件。
AutoCAD啟動(dòng)時(shí)會(huì)在默認(rèn)路徑中按mns→mnc→mnu的順序依次查找,找到任何一類文件都可生成mnc文件并加載。如這些文件均未找到,將
彈出上述信息窗口。按“確定”進(jìn)入AutoCAD后工具欄就丟失了,而且相應(yīng)菜單中沒有恢復(fù)工具欄的功能。但此時(shí)命令行還可以使用,只需要輸入
“menu”命令,就會(huì)彈出一個(gè)“選擇菜單文件”窗口,找到上述任何一類菜單文件打開即可恢復(fù)工具欄。
如果文件損壞或被刪除,可以從其它AutoCAD運(yùn)行正常的計(jì)算機(jī)上拷貝一個(gè)菜單文件按同樣的方法加載。當(dāng)然還可以把可正常使用的菜單文件拷貝到默
認(rèn)路徑下,這樣AutoCAD將自動(dòng)加載而不用我們手動(dòng)設(shè)置,此時(shí)可用“options”命令進(jìn)入“選項(xiàng)”窗口查看默認(rèn)路徑。
在加載自定義菜單時(shí),如果通過MENU加載,就會(huì)把a(bǔ)cad.cui趕跑了。如果想保留acad.cui(CAD默認(rèn)菜單),應(yīng)該用
MENULOAD來加載(局部加載),這樣兩個(gè)菜單都在,如果不用了,也可以通過這個(gè)命令來卸載。用了之后如果不卸載,退出cad之后下次啟動(dòng)還會(huì)加載自
定義菜單。
怎樣在Auto CAD 2006 加載自定義菜單文件?
問題:我想在Auto CAD 2006
加載自定義菜單文件,不改變acad.cui的原有菜單只是在其后加一欄菜單(在"幫助"菜單POP12后加"自定義"菜單POP13)
回答:你可以用寫字板程序打開acad.MNU文件,然后按照其格式把POP13的內(nèi)容寫進(jìn)去,存盤后,重新啟動(dòng)ACAD就行了。如果還不行,就在
啟動(dòng)ACAD后鍵入命令MENU,然后根據(jù)提示選擇ACAD.MNU。