Тема: Как закрыть AutoCAD 2007?
Всем привет,
Подскажите плз каким образом можно из своей arx закрыть AUTOCAD 2007.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → ObjectARX → Как закрыть AutoCAD 2007?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Всем привет,
Подскажите плз каким образом можно из своей arx закрыть AUTOCAD 2007.
Например, послать команду _QUIT в командную строку.
Например, послать команду _QUIT в командную строку.
Попробовал, так не работает :(
acedCommand (RTSTR, _T("_QUIT"), RTNONE);
:( Может я неправильно делаю??
У меня и такое не работает :(
acedCommand(RTSTR, "_circle", RTSTR, "10,10",RTSTR, PAUSE,RTSTR, "_line", RTSTR, "10,10", RTSTR, "20,20", RTSTR, "", 0);
> Gimli
На личном опыте убедился что 2007 версия малех недоработана. :) Там дублируются команды вызванные с консоли и через acedCommand, поэтому может быть очень непредсказуемый результат. Короче глюкавая она.
Попробуй на 2008. Должно работать.
А вообще-то можно закрыть процесс акада используя стандартные С++ методы :) Но это если ты не ищешь легких путей.
> Gimli
Попробуй через acedPostCommand(_T("_QUIT\n"));
Попробуй через acedPostCommand(_T("_QUIT\n"));
Такой функции нет. :(
Заранее извиняюсь за свою бестолковость, но там ссылки на использование этой функции. У меня же просто компилятор ругается: 'acedPostCommand': identifier not found. Или вы имели ввиду использование этого:
CString StrToExec; StrToExec.Append(_T("_QUIT\n")); acDocManager->sendStringToExecute(acDocManager->curDocument(),StrToExec.GetBuffer(),false,true); StrToExec.ReleaseBuffer();
Так тоже не работает.
> Gimli
Я имел в виду:
int acedPostCommand(wchar_t const *str);
Вставь это описание и попробуй. Еще можно послать главному окну AutoCAD WM_CLOSE:
PostMessage(adsw_acadMainWnd(), WM_CLOSE, 0, 0);
Пробовал следующее:
1) acedPostCommand(_T("_QUIT\n")). Не работает.
В окне Автокада выводит:
Файл настройки загружен успешно. Группа настройки: ACAD
Файл настройки загружен успешно. Группа настройки: CUSTOM
Выполняется регенерация модели.
_QUIT
Утилиты меню AutoCAD загружены.
Команда: КОМСТР
2) Пробовал слать мессаджи
так:
CWnd* pAcadWnd = CWnd::FromHandle(adsw_acadMainWnd()); pAcadWnd->SendMessage(WM_DESTROY,0,0);
WM_DESTROY рушит акад с exeption.
WM_CLOSE никакого эффекта.
PostMessage(adsw_acadMainWnd(), WM_CLOSE, 0, 0);
Выводит при загрузке arx:
Файл настройки загружен успешно. Группа настройки: ACAD
Файл настройки загружен успешно. Группа настройки: CUSTOM
Выполняется регенерация модели.
_QUIT
Утилиты меню AutoCAD загружены._quit
Команда: КОМСТР
Видимо не так то просто его прикрыть.
> Gimli
Не понял. Ты пытаешься закрыть AutoCAD при его загрузке? Зачем?
Мне необходимо открыть Акад считать настройки слоев из ини файла, создать слои, тоже самое для текстовых стилей. Затем сохранить этот файл как dwg и закрыть Акад. Кроме закрытия автокада я все сделал.
> Gimli
Я не понял:
1) как ты запускаешь AutoCAD
2) Из какого контекста (случайно не из On_kInitAppMsg)?
3) И вообще приведи свой код, а то идет гадание на кофейной гуще...
extern "C" __declspec(dllexport) AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* p) { switch( msg ) { case AcRx::kInitAppMsg: acrxRegisterAppMDIAware(p); [b]startCreating();[/b] break; case AcRx::kUnloadAppMsg: break; default: break; } return AcRx::kRetOK; }
void startCreating() { ... createLayer( nameLayer, keyVal, layerId );// здесь создаются слои .... createTextStyle(nameStyle, keyVal, styleId);// здесь создаются текстовые стили .... AcDbDatabase* pDb = acdbHostApplicationServices()->workingDatabase(); if ( pDb ) { pDb->saveAs(_T(""C:\\test.dwg";")); } acedPostCommand(_T("_QUIT\n")); // не работает }
Автокад запускаю пока через стандартные настройки в проекте. Планирую запускать через ShellExecute из своего приложения.
> Gimli
Так я и понял про InitAppMsg. В этом контексте нельзя работать с чертежом. В этот момент AutoCAD еще не полностью инициализирован.
попробовал так:
case AcRx::kLoadDwgMsg: startCreating();
тот же еффект
Пробовал еще так:
case AcRx::kLoadDwgMsg: { try { CoInitialize(NULL); AutoCAD::IAcadApplicationPtr pAcad; HRESULT hr = NOERROR; CLSID clsid; LPUNKNOWN pUnk = NULL; LPDISPATCH pAcadDisp = NULL; CLSIDFromProgID( L"AutoCAD.Application", &clsid ); GetActiveObject(clsid, NULL, &pUnk); hr = pUnk->QueryInterface(IID_IDispatch, (LPVOID*) &pAcadDisp); hr = pAcadDisp->QueryInterface(AutoCAD::IID_IAcadApplication, (void**)&pAcad); pAcad->Quit(); pUnk->Release(); pAcadDisp->Release(); }
Возвращает pUnk нулевой. :(
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → ObjectARX → Как закрыть AutoCAD 2007?
Форум работает на PunBB, при поддержке Informer Technologies, Inc