Как программно отследить нажатие команд

Программирование для CATIA.

Как программно отследить нажатие команд

Сообщение psa » 10 фев 2012 09:36

Можно ли программно отследить, какие команды использует пользователь при работе с КАТИЯ.
Нужно для того,чтобы точно знать какими лицензиями пользуется пользователь.
Не то, что он выбрал, а то что на самом деле использует.

Есть какой-то способ?
psa
Новичок
Новичок
 
Сообщения: 2
Зарегистрирован: 10 фев 2012 09:30

Re: Как программно отследить нажатие команд

Сообщение Wireless_Fidelity » 10 фев 2012 11:12

Здравствуйте.

Самое правильное - развернуть сервер с плавающими лицензиями и снимать статистику оттуда.

Менее правильно - написать CAA компонент, который бы вызывался при вызове модуля (приложения) в CATIA и отсылал бы информацию о вызове, кому надо.

Если нет CAA, то с помощью WinAPI можно поставить хук на окно CATIA и ловить сообщения о создании новых окон, вызове команд меню и т.п. Количество возможных сообщений - огромное.

Вариант "напролом" - написать внешнее приложение (можно на VB.Net), которое бы подключалось к запущенной копии CATIA и с определённой регулярностью проверяло бы, какой модуль запущен на текущий момент (это можно делать и на WinAPI, тем самым устраняя необходимость нагружать катийный COM-сервер).
Если нужна информация по конкретным командам, то можно также снимать значение CATIA.StatusBar (это уже в COM). В этой переменной пишется текущая надпись в статусбаре. Почти каждая команда отображает в нём какое-либо сообщение пользователю. Зная текст сообщений (правильнее всего брать из NLS), можно понять, какая команда запущена.

Как видите, количество вариантов ограничивается фантазией, навыками и желанием.
Аватара пользователя
Wireless_Fidelity
Активный участник
Активный участник
 
Сообщения: 394
Зарегистрирован: 10 апр 2010 00:11

Re: Как программно отследить нажатие команд

Сообщение psa » 10 фев 2012 12:47

Лицензии сетевые. Снимать статистику с сервера не получается (база данных с .log все время портиться и уже Report не возможно получить, если только лог файл периодически удалать).
Без лог файла можно собрать статистику, что пользователь подключил.
А нужно еще узнать, что на самом деле он использует.

Хук - не думаю, что хорошее решение.
CATIA.StatusBar - возможно???

Хотелось бы с использованием САА RADE, написать .dll, в которой бы отслеживались бы события.
Так можно ли перехватить события в CATIA средствами САА RADE????
psa
Новичок
Новичок
 
Сообщения: 2
Зарегистрирован: 10 фев 2012 09:30

Re: Как программно отследить нажатие команд

Сообщение Wireless_Fidelity » 10 фев 2012 14:27

Портящаяся база данных это вопрос к системному администратору.

Хук можно сделать не на окно CATIA, а на дочернее для него окно статусбара. Интересующее нас сообщение - WM_SETTEXT. С таким подходом всё должно реализовываться достаточно просто и работать, как часы.

CATIA.StatusBar - возможно???

Я же написал, что это возможно. Только вот проверять его нужно будет по таймеру, а не по событию, как было бы с хуком.

Думаю, самое эффективное это читать текст статусбара, искать по нему alias в NLS, а затем выводить его в файл лога. Как правило, NLS-имена вполне читаемы и можно понять, что к какой команде относится. Маленькая неприятность в том, что NLS-ок очень много, поэтому для быстрой работы нужно их как-то проиндексировать. Просматривать каждый раз весь список файлов не годится.

По поводу создания dll для прослушивания событий. Почитайте про Callback mechanism и Send/Receive mechanism в CAA Encyclopedia. Но на мой взгляд, реализовать прослушивание событий будет очень трудоёмко.
Аватара пользователя
Wireless_Fidelity
Активный участник
Активный участник
 
Сообщения: 394
Зарегистрирован: 10 апр 2010 00:11


Вернуться в CAA-RADE

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3