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

Тема в разделе "MS Visual C++", создана пользователем lifer, 17 фев 2007.

  1. lifer

    lifer Гость

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

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

    zubr Гость

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

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Если не появляется рамка - значит ты нашел какой-то другой диалог. Поищи тщательнее - может там одно окно закрывает другое - такие системы могут наворотить много чего. Настоящий диалог может быть чайлдом окна приложения - я бы искал в спае по списку сначала. Но не удивлюсь если стандартными методами не подступишься туда.
     
  4. lifer

    lifer Гость

    Я нигде не могу найти VIEWWND, предлагают только заказать ее на диске :) . Если не трудно, кинь пожалуйста мне на мыло lifer-smith@yandex.ru - заценю.
     
  5. lifer

    lifer Гость

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

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Ну я бы все-таки для начала порылся в списке окон из спая. С такими продвинутыми методами защиты я не знаком, но скажем в IE тоже нет едит-контролов. Если поиск по списку ничего не даст - лучше рыть интернет - наверняка кто-то уже с этим работал. Может есть какие законные интерфейсы.
     
  7. zubr

    zubr Гость

    Вот сайт автора: Сайт
     
  8. lifer

    lifer Гость

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

    2 grigsoft:

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

    zubr Гость

    Да конечно прога простенькая, но мое имхо, когда надо определить хэндл, класс окна, гораздо удобнее чем в списке Spy++ ковыряться - навел курсор на окно и получай хэндл с классом. А размер - ну так по всей видимости она на Delphi написана.
    Чудес не бывает. Как то же приложение должно получать пользовательский ввод. Попробуй в отладчике посмотреть - какие то API должны вызываться.
     
  10. LAW

    LAW Гость

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

    lifer Гость

    Вот-вот...Но я с этим разобрался, просто шлю диалогу сообщения, что нажимаются кнопки мыши и указываю координаты курсора, полученные экспериментальным путем, а он сам определяет, в какой контрол я тыкнул и рисует, например, галочку в чекбоксе. Красота...:) Всем спасибо за обсуждение!
     
  12. LAW

    LAW Гость

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

    progstone Гость

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

Поделиться этой страницей