Показать сообщение отдельно
Старый 08.06.2006, 13:18   #18  
batiskaf_new is offline
batiskaf_new
Участник
 
39 / 19 (1) ++
Регистрация: 07.06.2006
Цитата:
Сообщение от db
Уж не знаю зачем Вам все это нужно. Может если расскажете зачем, то люди поскажут и как это реализовать.

Как уже говорилось - вставить свой код в методы системных классов нельзя. Заставить систему везде вместо инстансов FormButtonControl создавать инстансы MySuperButtonControl то же нельзя (подкрячивание exe-шников в качестве средства не рассматривается) Зато можно навесить хук на всю аксапту и обрабатывать в нем допустим все WM_CLICKED как заблагорассудится. Пишите dll c хуком например на VC++, загружаете ее и вперед с песней.

Только еще раз - а зачем все это?
Я уже писал для чего:
http://forum.mazzy.ru/index.php?showtopic=5695#

Мне нужно интегрировать в ядро Аксапта агента, который будет мне давать следующие сервисы:

1. Программа максимум - уметь подключаться к высокоуровневым сообщениям Аксапта контролов. WM_CLICKED меня не совсем устраивает, потому что я бы хотел знать точно что сделал user гридом, выбрал ячейку, выбрал строку, поменял значение ячейки, все эти вещи можно получить из нотификаций класса FormGridControl.
2. Если первое не возможно, тогда программа минимум - получить доступ к DataStructure каждого конкретного контрола. Написать хук на низкоуровневые сообщения можно, но иметь доступ к структуре данных того же грида, по которому кликают в любом случае нужно. Другими словами, мне нужно будет взять HWND из системного сообщения, подключиться к Аксапте, получить каким то образом по этому window handle ссылку на объект, который имплементирует это окно, и получить инфекс ячейки, которая была выбрана пользователем, получить содержимое ячейки, итерировать строки, столбцы, вобщем манипулировать со структурой данных. Для этих целей я думал воспользоваться СОМ, потому что вся эта информация нужна в той утилите, которая это все будет записывать в скрипте, то есть в QTP .

Если первый вариант не возможен ( в чем я лично сомневаюсь), тогда давайте обсуждать дальше только второй сценарий (программа минимум). Как мне получить через рефлексию список всех объектов типа FormGridControl, которые были созданы в системе на данный момент, далее я обойду весь список, сравню window handle и найду тот контрол, по которому кликнул пользователь, и смогу выяснить все подробности об этом объекте (допустим что проблема интерпроцесс комуникации через СОМ у меня уже решена) Или может есть возможность у какого то глобального объекта в системе спросить список всех созданных форм, пройти весь список, обойти все child controls, и найти таким образом мой грид по хеэндлу.

P.S>
Кстати, если можно поменять имплементацию SysSetupFormRun, то почему нельзя классы контролов менять, не понял?

Последний раз редактировалось batiskaf_new; 08.06.2006 в 13:26.