01.04.2003, 11:09 | #1 |
----------------
|
Нешуточная задача
Цитата:
В caption главного окна Axapta выводить информацию о номере сеанса. Эта информация аналогична информации, которая отображается в окне "Активные пользователи", колонка "сеанс" напротив активного пользователя
Вот тут возникают проблемы 1. Как получить hwnd приложения? Использовать GetTop или GetForeground можно, но если после набора пароля юзер быстренько перейдет в другое приложение, то caption поменяется у открытого окна. 2. В какой момент менять caption? Если это сделать в startupPost, то изменение быстренько затрется |
|
01.04.2003, 12:06 | #2 |
Участник
|
Можно узнать, чем вызвана такая задача?
__________________
Остановите этом мир, я сойду! |
|
01.04.2003, 12:16 | #3 |
----------------
|
Цитата:
Это нужна для того, чтобы пользователь мог видеть какое приложение Axapta у него подвисло, когда он уже ничего не может открыть, но caption у него еще виден.
|
|
01.04.2003, 14:06 | #4 |
Участник
|
На каких именно задачах наблюдается блокировка?
__________________
Остановите этом мир, я сойду! |
|
01.04.2003, 14:58 | #5 |
----------------
|
Цитата:
На каких именно задачах наблюдается блокировка?
При создание + регистраия маршрутных карт + создание накладных и счетов-фактур. |
|
02.04.2003, 09:17 | #6 |
Moderator
|
К сожалению совсем нет времени, чтобы самому попробовать решить эту задачу
Но общие мысли такие: Как я понял проблема в идентификации конкретного окна Аксапты. Последовательность как я понимаю такая: 1. При загрузке Аксатпа ищет все окна, где в заголовке встречается Navision/Microsoft/Micro$oft Axapta. 2. Смотрим, есть ли в заголовке этого окна идентификатор сессии (например "ID=") 3. Если есть, то это уже загруженная Аксапта с проставленным идентификатором сессии. Если нет, то это та, только что загруженная Аксапта - изменяем ее заголовок - ставим туда идентификатор сессии. Таким образом, как мне кажется, все будет работать, за исключением того случая, когда пользователь ОДНОВРЕМЕННО ЗАПУСТИТ, два экземпляра Аксапты. Работать одновременно они могут - ради бога, главное одновременно не запускать. Хотя я не уверен, что у пользователя вообще получится ОДНОВРЕМЕННО ЗАПУСТИТЬ два экземпляра программы. Цитата:
Если это сделать в startupPost, то изменение быстренько затрется
|
|
02.04.2003, 09:53 | #7 |
----------------
|
Цитата:
А можно про это поподробнее...
Неужели Аксапта переодически устанавливает свой заголовок окна ? Damgaard/Navision/Microsoft/Micro$oft Axapta А после открытия главного меню (или перед этим, но после startupPost) в заголовок прописывается держатель и название приложения Цитата:
Чтобы это случилось, кто-то должен сказать SetWindowsText. Кто это делает ?
|
|
02.04.2003, 10:04 | #8 |
Moderator
|
Можно попробовать создать табличку с двумя полями - идентификатор сессии, handle главного окна Аксапты.
В startupPost - добавлять туды информацию о запускаемом приложении. В дальнейшем регулярно, например при открытии каждого окна Аксапты (также как ты делал Micro$oft) по идентификатору сессии находить хэндл в таблице и уже по этому хэндлу обновлять заголовок. Не пробовал, но по моему должно сработать. Таблицу можно заменить чем нибудь другим - идея в том, что пока заголовок уникален(а я понимаю, это в момент запуска Аксапты) нужно где то запомнить идентификатор сессии и соответствующий ему handle. Если с таблицей получатся плохо(блокировки) - можно попробовать файл на локальном компе или что-то вроде этого. P.S. Как я понимаю, вариант написания внешнего приложения не рассматривается ? |
|
02.04.2003, 10:23 | #9 |
----------------
|
Спасибо за предложения
Как мне кажется, решение должно быть адекватно задаче.. Т.е. если задача вывести в caption окна какой-то текст, то это не должно порождать создание таблиц (массивов, контейнеров и т.д.) и поддержку в ней актуальных значений. Вчера я пришел к некоторому решению, которое пока меня устроило (если не найду более простого) 1. hwnd окна можно получить infolog.hwnd() 2. Вызвать процедуру переименования по setTimeOut. Прикол в том, что в классе Application на 3х уровневой конфе он не работает.. а вот в Info работает (кстати, Info объявлен final, но пришлось в него добавить метод) |
|