AutoCADは、AutoLISPやADS、ARX等を使って機能を追加したり自動処理を行ったりできるようになっていますが、AutoCAD独自のプログラミング知識が必要になります。ここでは、用途は制限されますが、もっと簡易的に外部プログラムからAutoCADを操作する方法を紹介します。
R13以降のAutoCADでは、WM_COPYDATAというウィンドウメッセージでAutoCADにコマンドを送付することができます。(R12ではWM_ACADというメッセージを登録していました。)AutoCAD LT に対しても使えます。次にC言語による例を示します。
COPYDATASTRUCT CpData; HWND hWndAcad; char *cmdstr; hWndAcad = ghWndAcad; /* AutoCADのウィンドウハンドル */ cmdstr = "line\n0,0\n10,10\n\n"; /* 送付するコマンド */ CpData.dwData = 1; CpData.cbData = strlen( cmdstr ) + 1; CpData.lpData = cmdstr; SendMessage( hWndAcad, WM_COPYDATA, (WPARAM)hDlg, (LPARAM)&CpData ); PostMessage( hWndAcad, WM_NULL, 0, 0 );
予め、EnumWindows()等でAutoCADのウィンドウハンドルを取得しておく必要があります。この方法は一方的にコマンドを送りつけるだけなので、あまり高度なことはできませんが、 AutoLISP等で追加したコマンドや、スクリプトの起動にも利用できます。
VisualBasicのSendKeysステートメント等でAutoCADにコマンドをキーストロークとして渡すことができます。AutoCAD LT に対しても使えます。次に例を示します。
cmdstr = "line" + Chr(13) + "0,0" + Chr(13) + "10,10" + Chr(13) + Chr(13) AppActivate "AutoCAD" SendKeys cmdstr, True
この方法も前節の方法同様、あまり高度なことはできませんが、手軽にVBAでも利用できますので、Excelとの連携等いろいろ活用可能でしょう。同様に、WSH(Windows Script Host)でもSendKeysメソッドでキーストロークを渡せます。次にVBScriptでの例を示します。
Set WSHShell = WScript.CreateObject("WScript.Shell") cmdstr = "line" + Chr(13) + "0,0" + Chr(13) + "10,10" + Chr(13) + Chr(13) WSHShell.AppActivate "AutoCAD" WSHShell.SendKeys cmdstr
上記の内容は、Autodesk社が公開している情報ばかりではなく、独自の調査によるものも含まれています。これらの情報は無保証でありサポート対象外ですので、参考にする場合はご注意ください。