Определить что автокад запустился и готов к работе

Автор Тема: Определить что автокад запустился и готов к работе  (Прочитано 9132 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн drunkwolfsАвтор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 1
  • Skype: drunkwolfs
У внешней программы запускающей автокад есть необходимость определять что автокад запустился и готов к работе.
Программу пишу на плюсах.
версии автокадов с 2010 по 2017, поэтому пытаюсь найти какой то универсальный способ для всех этих версий.
Смотрел вывод командной строки процесса acad.exe, ничего полезного не нашел.
У кого есть какие идеи?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
У внешней программы запускающей автокад есть необходимость определять что автокад запустился и готов к работе.
Как она запускает AutoCAD?
Эту статью читал: http://adn-cis.org/kak-ispolzuya-visual-c-zapustit-autocad-i-zastavit-ego-vyipolnyat-nekotoryie-dejstviya.html ?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн drunkwolfsАвтор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 1
  • Skype: drunkwolfs
Как она запускает AutoCAD?
CreateProcess(str1, str2, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
Извините, вам запрещён просмотр содержимого спойлеров.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
drunkwolfs,
1. Прочитай у меня в подписи как следует форматировать код на форуме.
2. Так запуская AutoCAD ты не сможешь определить когда он готов к работе.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн drunkwolfsАвтор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 1
  • Skype: drunkwolfs
А как тогда нужно запускать автокад?
Я с киберфорума и привык что там для форматирования кода каждого из языков есть отдельная кнопка. Это очень удобно. Удобнее чем выбирать в списке.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Я с киберфорума и привык что там для форматирования кода каждого из языков есть отдельная кнопка. Это очень удобно. Удобнее чем выбирать в списке.
А здесь иначе. Извольте соблюдать Правила форума. Кстати, я уже не первый раз об этом Вас прошу.
А как тогда нужно запускать автокад?
Статью, ссылку на которую я давал выше, читали?
Если запускать AutoCAD через CreateProcess, то обращаться потом к нему очень сложно. Разве что грузить arx-файл или запускать скрипт (смотри ключи запуска acad.exe). Скрипт автоматически запускается после того, как AutoCAD готов принимать команды.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн drunkwolfsАвтор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 1
  • Skype: drunkwolfs
Как выбрать какой автокад запустить на этапе исполнения? у меня всегда 2014 запускается, хотя я указал tlb от 2010-го.
Мне нужен один исполняемый файл для запуска любой версии автокад.
Еще не понятно где указывать разрядность того автокада который необходимо запустить

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
В таком режиме, боюсь, придется читать реестр, определять путь к acad.exe для нужной версии - и запускать именно его.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Как выбрать какой автокад запустить на этапе исполнения? у меня всегда 2014 запускается, хотя я указал tlb от 2010-го.
А кто тебе сказал, что tlb хоть как-то определяет какая версия AutoCAD будет запущена? Даже то, что указано в моей статье по ссылке выше не гарантирует запуск указанной версии AutoCAD. Чтобы запускалась нужная версия через COM/ActiveX нужно править налету реестр, причем раздел, который недоступен обычным пользователям: HKEY_CLASSES_ROOT\AutoCAD.Application и/или HKEY_CLASSES_ROOT\AutoCAD.Application.XX.Y
Поэтому если необходим запуск и работа с конкретной версией AutoCAD, то необходимо:
1. Завершить все процессы acad.exe - как это делать решать тебе.
2. При помощи CreateProcess запускаешь нужный acad.exe
3. Немного подождать и через COM/ActiveX подключиться к запущенному acad.exe:
Код - C++ [Выбрать]
  1. CLSID clsid ;
  2. HRESULT hr = S_OK;
  3. _com_util::CheckError(CLSIDFromProgID (L"AutoCAD.Application", &clsid));
  4. IAcadApplicationPtr pApp;
  5. // Я тут написал цикл, который может оказаться
  6. // бесконечным если не удается подключится к AutoCAD
  7. // так что продумай вариант выхода из этого цикла
  8. while (FAILED(pApp.GetActiveObject(clsid)))
  9. {
  10.    Sleep(1000);
  11. }
  12. // Теперь мы готовы работать с AutoCAD через COM/ActiveX
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Еще не понятно где указывать разрядность того автокада который необходимо запустить
В пределах от 2010 и до последнего на текущий момент 2017 разрядность системы определяет разрядность AutoCAD, так что тебе не нужно с этим заморачиваться.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение