| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > EnumChildWindows - не могу найти под-окно |
| Автор: theHelg 17.10.2009, 18:43 | ||
| Добрый день! не могу разобраться! Пытаюсь найти хэндл на суб-окно в клиенте. Вижу через InqSoft Window Scanner, что в чужом клиенте у главного окна есть под-окно с классом Internet Explorer_Server. И что-то у меня не получается правильно все прописать... В чем ошибка?
|
| Автор: LamerTM 18.10.2009, 14:54 | ||||
Попробуй этот код изменить на такой:
Ну и соответственно во всех вызовах этих функций сделать то же самое. У меня аналогичный код работает. |
| Автор: LamerTM 18.10.2009, 15:11 |
| Хотя нет, это не причина. Имя класса по-моему не может содержать пробел. А у тебя оно с пробелом. |
| Автор: theHelg 19.10.2009, 00:15 | ||||
| А что мне даст ref? Если я этот третий параметр тупо игнорю... А имя класса я взял из шпиона... это он такой класс видит у внутреннего окна IE например... Но мне кажется, что эта процеда вообще не отрабатывает... Так как даже если я вне проверки на класс делаю - то есть:
То не меняется содержимое статичной переменной статичного класса... И туда даже дебагер не заходит, и как отладить - без понятия... Ничего не пишет, ничего не происходит :( Как это все выглядит. У меня есть сторонний клиент, в котором мне нужно выполнить набор авто-тестов. К сожалению, требуется именно C#... У меня есть handle главного окна.
для данного окна не работает — видимо не реагирует на команды. То есть, как я думаю — нужно сюда поставлять уже непосредственно handle окна с нужным классом ("Internet Explorer_Server"). Или я не прав? Данным кодом пытаюсь найти все дочерние окна и запомнить нужный хандл. Но вот не получается... :( |
| Автор: LamerTM 19.10.2009, 08:52 | ||||
| Посмотрел в Spy. Имя класса всё таки может содержать пробел. Запустил твой код. Он работает. Находит хэндл окна по имени класса. Так что в коде что ты привёл всё правильно. Значит ошибка у тебя в чём-то другом. На всякий случай скопипасчу код что у меня заработал в студии: На форме должен быть RichTextBox и кнопка.
И код кнопки на форме:
Работает так. Запускаешь IE. Нажимаешь кнопку на форме. В ричтекстбоксе пишется хэндл его подокна с именем класса "Internet Explorer_Server". |
| Автор: theHelg 19.10.2009, 13:31 | ||
| Хм... действительно работает... Видимо все дело было в том, что я handle окна искал через:
И это, судя по всему, явно не правильно - так он не отрабатывает... Вечером буду тестировать, но судя по всему - то, что мне нужно |
| Автор: LamerTM 19.10.2009, 14:15 | ||
| Если тебе надо найти конкретное окно и ты точно знаешь его место в иерархии, то незачем использовать EnumChildWindows. Всё можно сделать через FindWindowEx. Код получится вроде такого:
PS 3 строчки вместо того, что у тебя в первом посте. |
| Автор: theHelg 21.10.2009, 12:04 |
| Да, спасибо! как говорит один мой знакомый охотник - Вот она почему не стреляла! не заряжена была!! С этим намного проще, так как действительно я знаю и главное окно, и место в иерархии... Хотя еще не понятно, почему теперь уже по правильному хандлу окна не могу послать клики мышки... это окно не реагирует :( |
| Автор: LamerTM 21.10.2009, 13:17 |
| Нацель Spy на окно и кликни мышкой вручную. Посмотри какие сообщения получало окно при клике. Пошли такие же (обычно достаточно только какого-то одного из них, надо только узнать какого). Как правило, это работает. Но не всегда. Иногда может не работать. Я, правда, уже забыл почему. Я когда посылал клики мыши, то (сейчас глянул в свой код) у меня wParam был равен единице. А у тебя там ноль. Может в этом причина. А может и нет. |
| Автор: theHelg 21.10.2009, 14:17 | ||
| хм, да, спасибо! хорошая мысль, попробую в ручном режиме слать сообщения через указателя... хотя я и не знал, что можно спаем выяснить, какие сообщения шлются окну при клике... Я шщлю клик вот так:
в этот handle и подставляю полученные хандлы.... |
| Автор: LamerTM 21.10.2009, 14:51 |
| А ты по вэб-станице кликать собираешься? Я читал что это дело сложное, и сам такого не делал. Вернее делал, но ламерским образом (правда в опере). |
| Автор: theHelg 21.10.2009, 14:55 |
| Угу, судя по всему да... Есть сторонний клиент, внутри которого что-то похожее на WebBrowser. Очень похоже на это, так как действительно клики мыши не принимает, а класс у него как у IE... |