Как перед запуском команды через AcApDocManager::sendStringToExecute осуществить прерывание команды

Автор Тема: Как перед запуском команды через AcApDocManager::sendStringToExecute осуществить прерывание команды  (Прочитано 9386 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 3
Есть еще вопрос:
Как перед запуском команды через AcApDocManager::sendStringToExecute осуществить прерывание команды, которая в этот момент запущена в командной строке Автокада? Если новая команда запускается через меню, то в строке меню перед именем команды ставится ^C^C. В sendStringToExecute это не работает.

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 3
Сам нашел ответ - запуск в строку символа Escape:
acDocManagerPtr()->sendStringToExecute(curDoc(), ACRX_T("\x1b"));

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Сам нашел ответ - запуск в строку символа Escape:
acDocManagerPtr()->sendStringToExecute(curDoc(), ACRX_T("\x1b"));

Обычно нужно двойной ESCAPE
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 3
Обычно нужно двойной ESCAPE
Почему двойной? Вроде выход из любой команды через один получается.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
очему двойной? Вроде выход из любой команды через один получается.
Не из любой. Поэтому в меню и ^C^C, что эквивалентно acDocManagerPtr()->sendStringToExecute(curDoc(), ACRX_T("\x1b\x1b"));
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Александр Ривилис 07-11-2020, 19:23:48

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Кстати, с давних времен (начиная с AutoCAD 2007) есть недокументированная функция:
Код - C++ [Выбрать]
  1. enum Acad::ErrorStatus __cdecl acedSendMenuStringToExecute(class AcApDocument *doc, wchar_t const * menuString, bool bEchoString);
Так что вызов может выглядеть так:
Код - C++ [Выбрать]
  1. acedSendMenuStringToExecute(curDoc(), L"^C^Cтвоя_команда ", false);
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 3
acedSendMenuStringToExecute
Не могу найти такую функцию. По заголовочным файлам не получается найти. Visual Studio ее не находит.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
acedSendMenuStringToExecute
Не могу найти такую функцию. По заголовочным файлам не получается найти. Visual Studio ее не находит.
Поэтому я и сказал, что она недокументированная. Она в acad.lib в версиях до 2012 включительно и в accore.lib начиная с 2013
Достаточно вставить то объявление, которое я указал выше.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 3
Достаточно вставить то объявление, которое я указал выше.
Извините, может я глупый вопрос задаю, но вставить объявление функции надо куда?

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 3
Извините, разобрался сам. Глюканул вечером :).

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 3
acedSendMenuStringToExecute(curDoc(), L"^C^Cтвоя_команда ", false);
работает. Большое спасибо за советы.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Извините, разобрался сам. Глюканул вечером :).
Во! Достаточно мне отвлечься на другие дела, как ответ сам нашелся. :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 3
Еще раз спасибо. Удачи и здоровья!