PDA

Просмотр полной версии : поиск одного хендла из тучи одинаковых.


metraz
01.06.2013, 00:49
В общем такая ситуация. Имеется программа. Мне нужно найти хэндл 2 элементов(2 кнопок).Что я делаю: я получаю я хэндл окна и...ступор. В нем, как вы видите, 5 дочерних окон tpanel. И только в одном из них находятся 2 кнопки, которые мне нужны(на картинке в самом низу). Как до них добраться? в тупую попытка прописать hnd2:=findwindowex(hnd,0,'TPanel',nil) успехом не закончилась. Заранее спасибо.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Тигрь
01.06.2013, 10:28
Перебирай по очереди хэндлы всех дочерних элементов, проверяй класс на TPanel, как только получишь хэндл по счету пятой TPanel значит ты на месте, дальше делай перебор вложенных элеменnов внутри этой панели по классы TButton.

metraz
01.06.2013, 11:47
Перебирай по очереди хэндлы всех дочерних элементов, проверяй класс на TPanel, как только получишь хэндл по счету пятой TPanel значит ты на месте, дальше делай перебор вложенных элеменnов внутри этой панели по классы TButton.

Можете дать простой пример перебора хэндлов? гугл не помог в этот раз.

NebesaBag
01.06.2013, 14:10
Раз уж такая тема, то прошу прощения, не мог ли бы кто-нибудь мне помочь и дать исходники програмки вида: в проге своей зажимаю битбатон например и отвожу курсор в то игровое окно хэндл которого желаю получить и после отпускания ЛКМ хэндлы переходят в мою прогу для дальнейших действий.

Тигрь
01.06.2013, 15:07
Можете дать простой пример перебора хэндлов? гугл не помог в этот раз.

вот гугл выдал:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
как раз то что тебе нужно

metraz
01.06.2013, 17:56
вот гугл выдал:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
как раз то что тебе нужно

Проблема решена иным способом, тему прошу закрыть.

Тигрь
01.06.2013, 19:02
Гуглишь по какому нибудь вопросу в программирование, уже перепробовал кучу поисковых запросов, но результата нет. И вот где нибудь на десятой странице ссылка на сайт, где как раз задается практически такой же вопрос с которым у тебя проблемы, и ты думаешь ну наконец то у кого то была такая же проблема и сейчас в этой теме ты найдешь решение. Но не тут то было в конце темы ГОРДО написано:

Проблема решена иным способом, тему прошу закрыть.

metraz, если нашел решение, так выложи его, у кого то возникнет похожий вопрос, и у него сразу будет решение и не придется создавать такую же тему и захламлять форум.

metraz
02.06.2013, 00:35
Гуглишь по какому нибудь вопросу в программирование, уже перепробовал кучу поисковых запросов, но результата нет. И вот где нибудь на десятой странице ссылка на сайт, где как раз задается практически такой же вопрос с которым у тебя проблемы, и ты думаешь ну наконец то у кого то была такая же проблема и сейчас в этой теме ты найдешь решение. Но не тут то было в конце темы ГОРДО написано:



metraz, если нашел решение, так выложи его, у кого то возникнет похожий вопрос, и у него сразу будет решение и не придется создавать такую же тему и захламлять форум.
Конечно, не вопрос.
Я воспользовался вот этим:
hnd2 := findwindowex(hnd, 0, 'TPanel', nil);
{здесь проверка, есть ли в hnd2 объект tbutton.}
Если нет, то, переходим к следующему такому же объекту вот этой функцией:
hnd2 := GetWindow(hnd2, GW_HWNDNEXT);

Тигрь
02.06.2013, 08:45
Раз уж такая тема, то прошу прощения, не мог ли бы кто-нибудь мне помочь и дать исходники програмки вида: в проге своей зажимаю битбатон например и отвожу курсор в то игровое окно хэндл которого желаю получить и после отпускания ЛКМ хэндлы переходят в мою прогу для дальнейших действий.

Специально для тебя написал пример. [Ссылки могут видеть только зарегистрированные и активированные пользователи]
Пользуйся.

VeTaL_UA
03.06.2013, 16:31
metraz, очень не рациональный способ выбрал. снапшоты погугли ;)

metraz
03.06.2013, 16:59
metraz, очень не рациональный способ выбрал. снапшоты погугли ;)

По-rкокретней бы) по запросу снапшот, снапшот делфи и снапшот поиск окна ничего относящегося к теме не выдало.

VeTaL_UA
03.06.2013, 17:53
Перебирать все окна через FindWindow немного глупо ;) Сделай снапшот, по нему вытащи нужный процес, а потом уже в нём окна смотри.

metraz
03.06.2013, 18:44
Перебирать все окна через FindWindow немного глупо ;) Сделай снапшот, по нему вытащи нужный процес, а потом уже в нём окна смотри.

Можно увидеть описание функции/команды? Чтобы ее можно было нормально погуглить) спасибо.

Тигрь
03.06.2013, 20:40
Можно увидеть описание функции/команды? Чтобы ее можно было нормально погуглить) спасибо.

[Ссылки могут видеть только зарегистрированные и активированные пользователи](v=vs.85).aspx