acDocManager->sendStringToExecute(acDocManager->curDocument(),_T("tonsel\n"),false,true);
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不會相互覆蓋。
---------------------------------------------------------------------------------------------------------------------
關
于CAD啟動時自動加載程序的研究(二)
1.Lisp法:a.在ACAD.EXE所在目錄加入acad.lsp或acaddoc.lsp
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
\AutoCAD
2006\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:\\Program
Files\\AutoCAD 2006\\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:\\Program Files\\AutoCAD 2006\\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:Load the application upon detection of proxy object.
當代理對像
被控知時另載相應ARX程序.
0x02:Load the application upon AutoCAD startup.
當AutoCAD啟動時加載相應
ARX程序.
0x04:Load the application upon invocation of a command.
當輸入命令時加
載相應ARX程序.
0x08:Load the application upon request by the user or another
application.
當有用戶或別的程序請求時加載相應ARX程序.
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。
---------------------------------------------------------------------------------------------------------------------
于
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:\\My Programs\\Auto
CAD\\acad.exe"的后面加上/p "d:/test/test.arg" (注意:雙引號,不是漢字的,而是英文的!)
有些命令要求:將加載的文件的路徑,加入搜索路徑。方法如下:
加入搜索路徑:菜單:工具->選項,(或用命令:_OPTIONS)
選中“支持文件搜索路徑”,點“添加”,點“瀏覽”,選擇要添加
的路徑,點“確定”。
等同于如下注冊表操作:注意需要先關閉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;"
注意:此法每次打開一個新的文檔就會自動加載注冊表中指定的文件。
--------------------------------------------------------------------------------------------------------------------
關
于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 應用程序。這兩個函數的原型是:
---- int acrxLoadModule(char * moduleName, int printit);
---- virtual Adesk::Boolean AcRxDynamicLinker::loadModule (char *
fileName, int printIt) = 0;
---- 其中各參數含義如下:
---- moduleName:待裝載的ARX 應用程序名;ARX 應用程序擴展名默認為.ARX,如果不是.ARX,則此處char *
moduleName 參數必須包括應用程序擴展名。
---- fileName:含義與上述moduleName 相同。但是fileName 必須包括待裝載的ARX 應用程序的路徑和擴展名。
---- printit:取0 則不顯示裝載結果,取非0 值則顯示。當printit 取非0 值時,如裝載成功,則在AutoCAD
命令窗口顯示“Runtime Extension is already loaded.\",否則,顯示“AcRxDynamicLinker
failed to load \"。
---- acrxLoadModule() 與AcRxDynamicLinker::loadModule
不同的是:acrxLoadModule() 從$ACAD 定義的AutoCAD 搜索路徑自動搜索待裝載的ARX 應用程序,并默認ARX
應用程序擴展名為.ARX。
int ads_arxload(const char *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之后下次啟動還會加載自
定義菜單。
怎樣在Auto CAD 2006 加載自定義菜單文件?
問題:我想在Auto CAD 2006
加載自定義菜單文件,不改變acad.cui的原有菜單只是在其后加一欄菜單(在"幫助"菜單POP12后加"自定義"菜單POP13)
回答:你可以用寫字板程序打開acad.MNU文件,然后按照其格式把POP13的內容寫進去,存盤后,重新啟動ACAD就行了。如果還不行,就在
啟動ACAD后鍵入命令MENU,然后根據提示選擇ACAD.MNU。