小视频免费在线观看_夜夜b_男女隐私免费视频_国产一级性生活视频_久久综合入口_精品国内视频

技術頻道

AutoCAD二次開發程序的自動安裝處理

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();//獲得文件名
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二次開發程序的自動安裝。
 

文章版權歸西部工控xbgk所有,未經許可不得轉載。

主站蜘蛛池模板: 亚洲黄色三级 | 日本高清视频在线 | 精品国产第一国产综合精品 | 欧美精品性做久久久久久 | 午夜av成人| 日韩一区二区在线播放 | 久久精品国产一区 | 国产h在线观看 | 欧美福利 | 黄色片免费看 | 国产精品久久久久久久久久小说 | 成人免费观看黄a大片夜月 日韩亚洲欧美一区 | 欧美 日韩 国产 成人 在线 | 91在线小视频 | 国产成年人 | 欧美一区二区三区在线观看视频 | 99福利在线 | 亚洲 变态 欧美 另类 捆绑 | 久久精品久久久 | 男女激情啪啪网站 | 激情一区二区三区 | 成人黄色网 | 欧美精品一区二区三区四区 | 精产国产伦理一二三区 | 国产成人精品综合 | 国产一区99 | 91欧美精品成人综合在线观看 | 国产福利一区在线观看 | 国产精选一区二区 | 久久久在线 | 亚洲精品久久久久 | 国产精华一区二区三区 | 日韩国产欧美精品 | 不卡一区二区在线 | 亚洲婷婷六月 | 国产一区二区黑人欧美xxxx | 一本到高清 | 国产成在线观看免费视频 | 精品中文字幕一区二区三区 | 91视频在线观看视频 | 久久xx |