A muito tempo atrás, numa galáxia muito distante, houve uma discussão no finado www.autolisp.com.br, sobre como obter uma lista das lisps carregadas no autocad...
Bem, naquela época, cheguei a postar um pequeno programa em ObjectARX na página.
O programa era este aqui:
Bom, se você quiser compilar, terá de baixar o Visual Studio e também o ObjectARX Cuidado para os pré requisitos das versões do ObjectARX.
Eu compilei aqui para o versão 2012 do AutoCAD (VS2010).
Para usar é simples:
Carregue o programa com o APPLOAD, e escolha a versão correta (32 ou 64 bits)
Digite:
(LoadedLispLisp)
e você terá algo assim:
Bem, naquela época, cheguei a postar um pequeno programa em ObjectARX na página.
O programa era este aqui:
//-----------------------------loadedlist.cpp------------------------- #if defined(_DEBUG) && !defined(AC_FULL_DEBUG) #error _DEBUG should not be defined except in internal Adesk debug builds #endif #include "aced.h" #include "tchar.h" #include "acdocman.h" #include "adslib.h" #define ELEMENTS(array) (sizeof(array)/sizeof((array)[0])) struct func_entry { TCHAR *func_name; int (*func) (struct resbuf *); }; /* Here we declare the functions that handle the calls; */ int LoadedList (struct resbuf *rb); /* Here we define the array of function names and handlers. */ static struct func_entry func_table[] = { {_T("LoadedLispList"), LoadedList},}; /* To add more functions to this table, just put them in the list, after declaring the function names. Note that in standard C it's all right to have a superfluous comma after the last item. */ /* Declarations of other local functions */ int dofun (void); int funcload (void); extern "C" AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* appId) { switch(msg) { case AcRx::kInitAppMsg: acrxDynamicLinker->unlockApplication(appId); acrxDynamicLinker->registerAppMDIAware(appId); break; case AcRx::kInvkSubrMsg: dofun(); break; case AcRx::kLoadDwgMsg: funcload(); } return AcRx::kRetOK; } static int funcload() { int i; for (i = 0; i < ELEMENTS(func_table); i++) { if (!acedDefun(func_table[i].func_name, (short)i)) return RTERROR; } return RTNORM; } /*-----------------------------------------------------------------------*/ /* DOFUN -- Execute external function (called upon an RQSUBR request). Return value from the function executed, RTNORM or RTERROR. */ static int dofun() { struct resbuf *rb; int val; /* Get the function code and check that it's within range. (It can't fail to be, but paranoia doesn't hurt.) */ if ((val = acedGetFunCode()) < 0 || val >= ELEMENTS(func_table)) { acdbFail(_T(/*MSG2*/"Received nonexistent function code.")); return RTERROR; } /* Fetch the arguments, if any. */ rb = acedGetArgs(); /* Call the handler and return its success-failure status. */ val = (*func_table[val].func)(rb); acutRelRb(rb); return val; } static int LoadedList(struct resbuf *rb) { AcApDocument* ActiveDoc = acDocManager->curDocument(); struct resbuf *resultlist, *rover; resultlist = rover = acutNewRb(RTLB); for (int i=0; iGetCountOfLispList(); i++) { AcLispAppInfo* appInfo = ActiveDoc->GetItemOfLispList(i); if (appInfo) { rover->rbnext = acutNewRb(RTSTR); rover = rover->rbnext; rover->resval.rstring = appInfo->appFileName; }} rover->rbnext = acutNewRb(RTLE); rover = rover->rbnext; rover->rbnext = NULL; acedRetList(resultlist); return RTNORM; } //-----------------------eof---loadedlist.cpp---------------------------
Bom, se você quiser compilar, terá de baixar o Visual Studio e também o ObjectARX Cuidado para os pré requisitos das versões do ObjectARX.
Eu compilei aqui para o versão 2012 do AutoCAD (VS2010).
Para usar é simples:
Carregue o programa com o APPLOAD, e escolha a versão correta (32 ou 64 bits)
Digite:
(LoadedLispLisp)
e você terá algo assim:
("C:\\program files\\autodesk\\autocad civil 3d 2012\\express\\acetutil.fas" "C:\\program files\\autodesk\\autocad civil 3d 2012\\express\\acetauto.LSP" "C:\\program files\\autodesk\\autocad civil 3d 2012\\express\\acettest.fas" "C:\\program files\\autodesk\\autocad civil 3d 2012\\support\\acad2012.LSP" "C:\\program files\\autodesk\\autocad civil 3d 2012\\support\\acad2012doc.LSP" "C:\\Users\\Neyton\\appdata\\roaming\\autodesk\\c3d 2012\\enu\\support\\civil.mnl")
Bacana, não?
Nenhum comentário:
Postar um comentário