Невозможно получить хэндл контрола

  • Автор темы lifer
  • Дата начала
L

lifer

Гость
#1
Привет всем.
Мне необходимо программно имитировать действия пользователя в одной проге, написанной на
FoxPro, т.е. жать кнопки, вводить данные в эдитбоксы и т.д. При запуске она создает главное окно
и дочернее диалоговое, где нужно ввести логин и пароль. Так вот, я не могу получить хэндлы
кнопок(чекбоксов) и эдитбоксов на диалоговом окошке, то есть контролов как бы вообще
нет - GetWindow, FindWindowEx, EnumChildWindows ничего не находят, я могу получить хэндл только самого диалога.
Запустил Spy++, нашел там этот диалог, а дочерних окон-то у него и нет! Окон с именами искомых контролов вообще нет в системе. Я могу посылать диалогу только безобидные сообщения типа
WM_SETTEXT и т.д.
Кстати, когда в Spy ищешь окно путем наведения "прицела", то рамка вокруг диалога не появляется
как у других окон,однако в списке он присутствует.
Для пробы создал свой диалог, проверил в Spy-все нормально.

Вообщем,даже не знаю, куда копать, так что буду благодарен за любые соображения на этот счет!
Заранее спасибо:)
 
Z

zubr

Гость
#2
Есть хорошая бесплатная программка, которая позволяет определить хэндлы и классы активных окон, а также окон на которые наведен курсор, называется VIEWWIND. Может поможет.
 

grigsoft

Well-Known Member
15.11.2005
735
0
#3
Если не появляется рамка - значит ты нашел какой-то другой диалог. Поищи тщательнее - может там одно окно закрывает другое - такие системы могут наворотить много чего. Настоящий диалог может быть чайлдом окна приложения - я бы искал в спае по списку сначала. Но не удивлюсь если стандартными методами не подступишься туда.
 
L

lifer

Гость
#4
Есть хорошая бесплатная программка, которая позволяет определить хэндлы и классы активных окон, а также окон на которые наведен курсор, называется VIEWWIND. Может поможет.
Я нигде не могу найти VIEWWND, предлагают только заказать ее на диске :) . Если не трудно, кинь пожалуйста мне на мыло lifer-smith@yandex.ru - заценю.
 
L

lifer

Гость
#5
Если не появляется рамка - значит ты нашел какой-то другой диалог. Поищи тщательнее - может там одно окно закрывает другое - такие системы могут наворотить много чего. Настоящий диалог может быть чайлдом окна приложения - я бы искал в спае по списку сначала. Но не удивлюсь если стандартными методами не подступишься туда.
Да вообщем то черт с ней, с рамкой. По крайней мере я могу получить хэндл диалога по его заголовку.
Но его элементов управления вообще нет в списке Spy ни у одного окна. Я где-то читал о том, что подобные окна могут защищать, размещая их на другом рабочем столе - например, окно с паролем при входе в виндовс находится на столе Winlogon, и нужно вызывать OpenDesktop, чтобы получить к нему доступ...Но разве бывает так, что окно диалога на одном десктопе, а его контролы на другом? Посоветуй, стоит ли двигаться в этом направлении, или же это бред?
 

grigsoft

Well-Known Member
15.11.2005
735
0
#6
Ну я бы все-таки для начала порылся в списке окон из спая. С такими продвинутыми методами защиты я не знаком, но скажем в IE тоже нет едит-контролов. Если поиск по списку ничего не даст - лучше рыть интернет - наверняка кто-то уже с этим работал. Может есть какие законные интерфейсы.
 
L

lifer

Гость
#8
Слушай, эта прога - полный отстой, не требующий ни капли внимания! Функциональность на нуле, информации об окнах и сообщениях никакой не дает, пятиминутная поделка вообщем. Однако весит аж 300 килов! Автору должно быть стыдно за то, что в инете выложил.

2 grigsoft:

Все оказалось просто, надо было лишь помыслить нестандартно:) Путем анализа сообщений в спае выяснил, что контролы отсутствуют, потому что их РЕАЛЬНО НЕТ :)). Кнопочки и едит боксы саморисованные:))), хотя имеют стандартный вид! И никаких сообщений родительскому окну не отсылают - такое я вижу в первый раз. Может авторы проги так постарались, или же это FoxPro сама делает - не знаю, но прикольно. Только что теперь дальше делать? Буду думать...
 
Z

zubr

Гость
#9
Слушай, эта прога - полный отстой, не требующий ни капли внимания! Функциональность на нуле, информации об окнах и сообщениях никакой не дает, пятиминутная поделка вообщем. Однако весит аж 300 килов! Автору должно быть стыдно за то, что в инете выложил.
Да конечно прога простенькая, но мое имхо, когда надо определить хэндл, класс окна, гораздо удобнее чем в списке Spy++ ковыряться - навел курсор на окно и получай хэндл с классом. А размер - ну так по всей видимости она на Delphi написана.
Все оказалось просто, надо было лишь помыслить нестандартно Путем анализа сообщений в спае выяснил, что контролы отсутствуют, потому что их РЕАЛЬНО НЕТ ). Кнопочки и едит боксы саморисованные)), хотя имеют стандартный вид! И никаких сообщений родительскому окну не отсылают - такое я вижу в первый раз. Может авторы проги так постарались, или же это FoxPro сама делает - не знаю, но прикольно. Только что теперь дальше делать? Буду думать...
Чудес не бывает. Как то же приложение должно получать пользовательский ввод. Попробуй в отладчике посмотреть - какие то API должны вызываться.
 
L

LAW

Гость
#10
Пользовательский ввод такие программы получает очень не просто. Я как-то правил такую.
В них есть класс, который в пустом окне саморисует все компоненты, а потом по координатам разбирается куда юзверь тыкнул. Система нипель и подделать дейсвия юзверя можно только зная смещения компонентов относительно начала формы и посылая в разборщик перемещения мыши и клики или необходимые коды кнопок.
Событие в такой проге только одно, что-то типа AppEvent. Всё остальное дописывается программистом.
 
L

lifer

Гость
#11
Пользовательский ввод такие программы получает очень не просто. Я как-то правил такую.
В них есть класс, который в пустом окне саморисует все компоненты, а потом по координатам разбирается куда юзверь тыкнул. Система нипель и подделать дейсвия юзверя можно только зная смещения компонентов относительно начала формы и посылая в разборщик перемещения мыши и клики или необходимые коды кнопок.
Событие в такой проге только одно, что-то типа AppEvent. Всё остальное дописывается программистом.
Вот-вот...Но я с этим разобрался, просто шлю диалогу сообщения, что нажимаются кнопки мыши и указываю координаты курсора, полученные экспериментальным путем, а он сам определяет, в какой контрол я тыкнул и рисует, например, галочку в чекбоксе. Красота...:) Всем спасибо за обсуждение!
 
L

LAW

Гость
#12
Ну ты маньяк! Мне терпения не хватило.
В результате я просто переписал прогу на С++ :)
 
P

progstone

Гость
#13
Всмысле не находит FindWindow находит диалоги а FindWindowEx их контролы чо за прога такая кинь ссылку(прогу) мне на мыло