Запись выполняемых команд

Автор Тема: Запись выполняемых команд  (Прочитано 2734 раз)

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

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

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

  • ADN OPEN
  • Сообщений: 19
  • Карма: 2
Добрый день.

Inventor 2015. Пишу на VBA.
Необходимо записывать логи выполненных команд .
(по аналогии : в AutoCAD есть штатное средства записи журнала всех команд).

в API нашел
Код - Visual Basic [Выбрать]
  1. ThisApplication.CommandManager.ActiveCommand
пишет текущую команду в данный момент времени.
но не могу найти событие начала команды.
Каким образом "ловить" начало команды ? (Мне не важно чем она завершилась и сколько длилась.)
Какой правильный подход к созданию лога вида: "название комманды- время"?
« Последнее редактирование: 18-09-2017, 16:59:07 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Запись выполняемых команд
« Ответ #1 : 18-09-2017, 17:23:37 »
Я очень мало чего смыслю в Inventor API, но нашел пару таких событий в документации:
1. UserInputEvents.OnActivateCommand
2. UserInputEvents.OnTerminateCommand
Первое событие - начало команды, второе - завершение команды.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Запись выполняемых команд
« Ответ #2 : 18-09-2017, 17:51:52 »
Не все команды ловятся. Да и некоторые объекты, особенно на чертежах, вообще не распознаются.
Инвентор это не автокад, поэтому полноценный макрорекордер сделать не получится.

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

  • ADN OPEN
  • Сообщений: 19
  • Карма: 2
Re: Запись выполняемых команд
« Ответ #3 : 18-09-2017, 19:43:05 »
UserInputEvents.OnActivateCommand
насколько я понял, это некий  обработчик навешиваемый на определенную команду.
но нужно уже знать что команда введена.

Не все команды ловятся.
подскажите как поймать те которые ловятся ? (минимальный пример).

вот имена команд которые мне нужны (вроде как) - есть даже пример в API "Print list of all Inventor Commands API Sample"
хотя вероятно это только список команд API , а не внутренних команд Inventor/
Код - Visual Basic [Выбрать]
  1. Dim oControlDef As ControlDefinition
  2. oControlDef.InternalName

Отмечено как Решение I_stiv 19-09-2017, 15:29:06

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Запись выполняемых команд
« Ответ #4 : 18-09-2017, 21:07:57 »
Нужно создать класс с именем Class1 и внести следующий код:

Код - Visual Basic [Выбрать]
  1. Option Explicit
  2.  
  3. Private WithEvents UserInput As UserInputEvents
  4.  
  5. Private Sub Class_Initialize()
  6.     Set UserInput = ThisApplication.CommandManager.UserInputEvents
  7. End Sub
  8.  
  9. Private Sub UserInput_OnActivateCommand(ByVal CommandName As String, ByVal Context As NameValueMap)
  10. MsgBox "Имя команды: " & CommandName
  11. End Sub
  12.  
  13.  

В модуле создать следующий макрос и запустить его:

Код - Visual Basic [Выбрать]
  1. Option Explicit
  2.  
  3. Sub ShowCommandsName()
  4. Dim commands As Class1
  5.  
  6. Set commands = New Class1
  7.  
  8. Do While True
  9.         ThisApplication.UserInterfaceManager.DoEvents
  10. Loop
  11.  
  12. End Sub
  13.  

P.S. Давно уже есть тот же VB.NET или C#, когда же этот VBA сдохнет наконец.