И опять о FindWindow
От: wwolandd  
Дата: 19.04.06 09:16
Оценка:
Есть некое приложение в котором надо найти и кликнуть на кнопку. Проблема в том, что кнопка является дочерней к большому колличеству других окон(4) и к тому же хотелось бы что б можно было получить хэндл для любой кнопки этого приложения, без дологоко выцепления ее через GetFildWindowEx() по всей иерархии...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: И опять о FindWindow
От: Crypto Украина  
Дата: 19.04.06 12:01
Оценка:
Здравствуйте, wwolandd, Вы писали:

W>Есть некое приложение в котором надо найти и кликнуть на кнопку. Проблема в том, что кнопка является дочерней к большому колличеству других окон(4) и к тому же хотелось бы что б можно было получить хэндл для любой кнопки этого приложения, без дологоко выцепления ее через GetFildWindowEx() по всей иерархии...


А как насчет если попробовать WindowFromPoint / ChildWindowFromPoint ? Если координаты или относительное расположение кнопки "более-менее" фиксированны?
Re: И опять о FindWindow
От: 0xMeHi Украина  
Дата: 19.04.06 12:03
Оценка:
Здравствуйте, wwolandd, Вы писали:

W>Есть некое приложение в котором надо найти и кликнуть на кнопку. Проблема в том, что кнопка является дочерней к большому колличеству других окон(4) и к тому же хотелось бы что б можно было получить хэндл для любой кнопки этого приложения, без дологоко выцепления ее через GetFildWindowEx() по всей иерархии...


иначе вроде никак...
Re[2]: И опять о FindWindow
От: wwolandd  
Дата: 19.04.06 13:00
Оценка:
Спасибо... видимо прийдется парится . Что-нибуть вроде рекурсивно поиска по всем дочерни окнам. Мда
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: И опять о FindWindow
От: wwolandd  
Дата: 19.04.06 15:20
Оценка:
И еще один вопрос: как получить список всех дочерних окон?
EnumWindows() дает только окна верхнего уровня, больше ничего подходящего ненашел.

Есть еще идея с EnumThreadWindows() но что-то я недопонимаю как это функция работает
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: И опять о FindWindow
От: Crypto Украина  
Дата: 19.04.06 15:27
Оценка:
Здравствуйте, wwolandd, Вы писали:

W>И еще один вопрос: как получить список всех дочерних окон?

W>EnumWindows() дает только окна верхнего уровня, больше ничего подходящего ненашел.

EnumChildWindows
Re[3]: И опять о FindWindow
От: Crypto Украина  
Дата: 19.04.06 15:31
Оценка:
Здравствуйте, wwolandd, Вы писали:

W>Спасибо... видимо прийдется парится . Что-нибуть вроде рекурсивно поиска по всем дочерни окнам. Мда


Кстати, есть еще CWnd::GetDescendantWindow, которая по идее вернет любого потомка в дереве по ID. Хотя мне ей пользоваться пока не приходилось..
Re: И опять о FindWindow
От: VladFein США  
Дата: 19.04.06 20:26
Оценка:
Здравствуйте, wwolandd, Вы писали:

W>Есть некое приложение в котором надо найти и кликнуть на кнопку. Проблема в том, что кнопка является дочерней к большому колличеству других окон(4) и к тому же хотелось бы что б можно было получить хэндл для любой кнопки этого приложения, без дологоко выцепления ее через GetFildWindowEx() по всей иерархии...

А нельзя просто послать WM_COMMAND с ID этой кнопки?
Re[2]: И опять о FindWindow
От: Crypto Украина  
Дата: 20.04.06 06:19
Оценка:
Здравствуйте, VladFein, Вы писали:

VF>А нельзя просто послать WM_COMMAND с ID этой кнопки?


Этот WM_COMMAND нужно слать родительскому окну кнопки, верно? А значит возвращаемся к предыдущей задаче.
Re: И опять о FindWindow
От: wwolandd  
Дата: 20.04.06 08:10
Оценка:
Вроде бы нашел решение, спасибо Cripto
EnumChildWindows - If a child window has created child windows of its own, EnumChildWindows enumerates those windows as well. !!!


Через FindWindow нужное нам верхнее окно, а потом EnumChildWindows
Или можно в EnumChildWindows вообще хендл десктопа передать, тогда совсем просто получается...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.