![]() |
|
|
![]()
|
|
| Schumi |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2006 Репутация: 1 Всего: 1 |
Немного лирического отступления...
Хочу программно управлять одной копией другой своей программы. Для этого фиксирую нажатие клавиши и кликание мыши и передаю второй копии. На входе имею хэндл окна, на который кликнули. Пытаюсь получить TControl через FindControl, зная хэндл. Если он нашелся, то всё замечательно. Далее я получаю форму, на которой он лежит. Плюс начинаю перебирать все дочерние элементы контрола и сопоставляю их расположение относительно того, где кликнули. Таким образом я получаю клики на всяких лейбелах, rxlabel, RxSpinButton, RxSpinEdit. И соотвественно передаю удаленной копии контрол, где кликнули и клиентские координаты. Таким образом я также кликаю на кнопку диалога на TFilenameEdit, потому что хотя она и находит кнопку, я реально передаю именно владельца TFilenameEdit со смещением мыши над кнопкой. Тупо координаты мыши не могу передать, потому что форма может отресайзина и всякие тулбары передвинуты... И вот затык с ComboBox. Начнем с попроще. Когда они щелкают на поле редактора. Там лежит Edit, его как контрол получить не удается :( Хотя если перебирать все хэндлы формы, то на нее выйти можно. А с выпадающим списком вообще труба, тогда создается THintWindow, и как на него щелкнуть... |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 167 Всего: 306 |
Schumi, я чего то не пойму - это рассказ или все-таки вопрос.
По поводу управления - юзай FindWindow. Имя классов ты и так должен знать - ведь утилита то твоя. Если что - поможет тебе WinSight32 - входящая в состав бормана. Добавлено @ 15:22 SendMessage - соответственно передача события контролу по найденному дескриптору Это сообщение отредактировал(а) mrbrooks - 4.12.2008, 15:24 |
|||
|
||||
| Schumi |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2006 Репутация: 1 Всего: 1 |
mrbrooks
Всё получается. Я получаю хэндл выпадающего списка и при нажатии на нем, точно буду знать, что нажали в выпадающем списке. Как узнать что нажали именно выпадающий список и не проверять на каждом нажатом контроле? (потому что не всё же время будут кликать на комбо) - тут просто - хэндл выпадающего списка вернет класс - ComboLBox. А вот как нажать на в таком же выпадающем списке такой же программы, но другого компа? И опять же вопрос, какому комбобокс принадлежит данный выпадающий список? Перебирать все комбобоксы и сравнивать хэндлы их выпадающих списков...не айс mrbrooks, |
|||
|
||||
| Schumi |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2006 Репутация: 1 Всего: 1 |
не пойму, а как сделать программное нажатие мыши - двойной клик, без отправки месаги?
То есть когда курсор уже стоит в нужном месте и надо просто кликнуть дважды. Одинарный делается на ура: mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); А двойной даже не представляю как... |
|||
|
||||
| Schumi |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2006 Репутация: 1 Всего: 1 |
не пойму, а как сделать программное нажатие мыши - двойной клик, без отправки месаги?
То есть когда курсор уже стоит в нужном месте и надо просто кликнуть дважды. Одинарный делается на ура: mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); А двойной даже не представляю как... |
|||
|
||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 25 Всего: 50 |
Симулировать щелчок мышкой
Это сообщение отредактировал(а) Alca - 9.12.2008, 19:02 |
|||
|
||||
| Schumi |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 5.4.2006 Репутация: 1 Всего: 1 |
Alca, да, спасибо, с этим уже разобрался
Но застреваю в другом месте: на некоторых кнопках на тулбаре (тулбар правда нестандартный - из пакета ToolBar2000), мескаги application->OnMessage не появлялись. Точнее WM_хBUTTONUP не появлялись. Перешел на проверку WM_хBUTTONDOWN, стало на ура. Но почему, так и не выяснил. Также нарвался на другое - если я в своей проге вызываю контекстное меню (popup menu), то месага, про левую кнопку вызова меню появляется, а вот когда на самом пункте меню щелкаю - нет. Это же касается и главного меню :( |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |