|  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, но пришлось в него добавить метод) | 
|  | 
|  | 
| Опции темы | Поиск в этой теме | 
| Опции просмотра | |
| 
 |