| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Узнать HWND кнопки |
| Автор: kapbepucm 20.9.2007, 16:22 |
| Окно сторонней программы с кучей кнопок. Надо Handle конкретной кнопки получить. Знаю расположение, надпись "Start" и кнопка активна (Enter'ом сразу нажимается). Пробывал разные способы, но получил только Handle родительского окна. Может кнопка просто нарисована? Подскажите что-нибудь. |
| Автор: zkv 20.9.2007, 16:36 |
| посмотри спаем (spy++ в составе VS) ID кнопки, через него и дотягивайся |
| Автор: Alexeis 20.9.2007, 17:39 | ||
kapbepucm, Так FindWindow и ищет только родительские окна.
|
| Автор: NikeDeForest 20.9.2007, 18:32 |
| Я делал глобальный хук на правую кнопку мыши и щелкал над необходимым мне элементом чужого приложения |
| Автор: Alexeis 20.9.2007, 19:02 |
| NikeDeForest, Ну это примерно как пушкой по воробьям |
| Автор: kapbepucm 21.9.2007, 08:06 |
| Спасибо, сейчас попробую! |
| Автор: NiJazz 21.9.2007, 09:04 |
| http://forum.vingrad.ru/forum/topic-170520/anchor-entry1242772/0.html |
| Автор: kapbepucm 21.9.2007, 12:56 |
| А есть хороший програмный способ узнать HWND дочернего окна, незная HWND родителя но зная заголовок? Например хочу увидеть все кнопки "OK". |
| Автор: Alexeis 21.9.2007, 13:19 |
| По крайней мере можно найти все окна и пройтись по всем дочерним компонентам... |
| Автор: NikeDeForest 21.9.2007, 18:22 |
| Alexeis, мне так проще показалось |
| Автор: Alexeis 21.9.2007, 20:24 |
| NikeDeForest, так я не с точки зрения простоты, а с точки зрения нагрузки на систему. |
| Автор: kapbepucm 2.10.2007, 16:23 | ||
|
| Автор: Alexeis 2.10.2007, 16:53 |
| kapbepucm, так Mihhail в своем уже показал перебор дочерних компонентов. |
| Автор: kapbepucm 3.10.2007, 07:56 |
| Странно, но данным примером я нахожу первую дочку и больше ничего... Может есть способ иначе действующий? |
| Автор: SenkraD 3.10.2007, 08:16 | ||
kapbepucm, вот кусок кода с Архангельского по Builder но всё кроме вывода API:
|
| Автор: kapbepucm 3.10.2007, 13:54 |
| Попытасля поработать с калькулятором- всё работает идеально (все дочки видны). Но если перейти к моей сторонней форме, то средствами EnumChildWindows или GetWindow нахожу только одну дочку без заголовка с каким-то классом Container60000000. Некоторое время назад комплекс VS потерпел у меня крах (по независящим от меня обстоятельствам пока не имею возможности это исправить), поэтому не могу пользоваться SPY++. Как поступать дальше? NikeDeForest, по-подробнее расскажи как пушкой по воробьям, что-то даже это направляет меня к одной и той-же дочке... |
| Автор: Earnest 3.10.2007, 16:29 |
| Скорее всего, форма и содержит одно окно-контейнер, а все кнопки - уже в нем. Проверь это дело с помошью Спая. И ищи не конкретно в данном окне, а в этой самой дочке. Кстати, вложенность может быть и глубже... |
| Автор: NikeDeForest 3.10.2007, 19:20 | ||||||
запуск хука
остановка хука
сама длл с хуком
Это по сути пример, переделанный из книги "С++ глазами хакера". Если есть эта книга, то туда глянь. Там в том числе и описано то, что тебе здесь уже предлагали - пробежать все окна (в том числе дочерние). |
| Автор: NikeDeForest 3.10.2007, 19:48 |
| Вот, это будет для тебя более фундаментально и полезно http://www.rsdn.ru/article/baseserv/hookdll.xml |
| Автор: kapbepucm 25.10.2007, 08:32 |
| Приветствую, это опять я. "Допрашивая" спая, удалось выяснть как там всё устроено. Как Earnest говорил, там многоуровневая вложеность. Теперь задача несколько поменялась. Мне надо пройтись от дочки до "первого" родителя. Подскажите, как это можно реализовать, изначально зная только HWND. |
| Автор: Andrey44 26.10.2007, 09:02 | ||
Изначально зная HWND чего? Если кнопки то GetParent(hwnd) и так далее до главного окна. |
| Автор: kapbepucm 26.10.2007, 13:28 |
| Русский язык допускает обращаться к неопределённому лицу как к лицу муж. рода А по делу, GetParent- это первое, что я испытывал; так я получал 0 в ответ |
| Автор: Andrey44 26.10.2007, 13:56 |
| Подожди, а зачем тебе зная HWND кнопки получать HWND родителя? |
| Автор: kapbepucm 26.10.2007, 14:13 |
| Хочу понять, почему то, что умеет спай, не могу реализовать я (стандартными функциями API). Собственоручно выяснил, что у главного родителя нет детей, а у дочерней кнопки нет родителя- так спай имеет другое (я думаю он прав) мнение. Что за $$$$$? На стандартном виндовском калькуляторе всё получается |
| Автор: Andrey44 26.10.2007, 15:01 |
| |
| Автор: kapbepucm 26.10.2007, 16:02 |
| Судя по тому, что GetParent говорит, да |