![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
Unconnected |
![]()
Сообщение
#1
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Привет, ещё раз) Никак мне апи с первого разу не даётся.
Вопрос в следующем. На формах приложений, как принято, лежат компоненты, их можно посмотреть например прогой Spy++ (наводишь прицел и отображается, что это). А некоторых приложениях этим прицелом отдельные поля и кнопки обнаружить нельзя, они там идут как бы "блоками", то есть, например, несколько кнопок, эдитов, чек-боксов объединены в один внутрипрограммный класс. И по отдельности они не определяются. Вопрос, возможно ли вытащить допустим текст из текстового поля, который является частью экземпляра такого класса? Сработает ли здесь GetWindowText? Я пытался вытащить все надписи с компонентов формы с помощью EnumChildWindows, и, вот, столкнулся.. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата И по отдельности они не определяются. Да? Можешь привести код программы, которая создает вот такие "внутренние" элементы, не определяемые по отдельности? Очень потестировать хочется ![]() |
Unconnected |
![]()
Сообщение
#3
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Цитата Да? Можешь привести код программы, которая создает вот такие "внутренние" элементы, не определяемые по отдельности? Не могу, да и эти все вроде с закрытым кодом) А вложенные элементы - не child-элементы? Их иначе искать надо? -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата А вложенные элементы - не child-элементы? Их иначе искать надо? А я что, знаю, как именно ты ищешь их? Я не телепат.Вот такая форма: ![]() Напиши программу, которая будет показывать дерево всех элементов, находящихся на этой форме. Ну, скажем, вот в таком виде: ![]() А дальше уже посмотрим, что там отображается, а что - нет. ![]() |
Unconnected |
![]()
Сообщение
#5
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Вот, что то такое:
Сообщение отредактировано: Unconnected - 7.08.2010 22:31 -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Вот в этом и твоя ошибка. Кто ж перечисляет все компоненты? А если у тебя окно на чистом API, что будет? Неужели тоже будут найдены компоненты?
![]() "Все проще гораздо" (С) Ирония судьбы Проходишь по всем элементам одного уровня, используя GetNextWindow + GW_HWNDNEXT, а для вложенных - используешь GetWindow + GW_CHILD и рекурсию: procedure TForm1.Build_Tree(Node: TTreeNode; myHandle: HWND; myLevel: Integer); |
Unconnected |
![]()
Сообщение
#7
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Хмм.. натравил я сейчас код на свою Мозиллу, а он что-то ни заголовки вкладок не показал, ни кнопок, ни строки адресной.. Может, это не вложенные (дочерние) элементы, а цельные компоненты?
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Хитрый, да? Мозилла не показывает свои заголовки. Об нее уже столько копий сломано, на многих форумах поднимались темы, не удается получить заголовки вкладок/адресных строк
|
Unconnected |
![]()
Сообщение
#9
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Интересно. Надежно её защитили от вторжений, наверное) Ну, один заголовок она всё же показывает..
Спасибо за помощь ![]() -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Цитата Надежно её защитили от вторжений, наверное Хочешь такую же "защиту" от вторжений? Могу рецептом поделиться ![]() |
Unconnected |
![]()
Сообщение
#11
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Хочу. Странно, winapi вроде один на всех, ан нет, не для всех законы писаны.
Можно и противоядие, в комплект) -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Противоядия не существует. Вернее, оно настолько сложное, что связываться с этим не надо.
А рецепт - очень простой: GetWindowText "берет" только то, что установлено через SetWindowText (дельфийское component.caption := 'что-то там' тоже работает подобным образом). А ты не устанавливай через SetWindowText. Рисуй текст на контроле вручную: DrawText в помощь. Тогда твои заголовки тоже не будут читаться через GetWindowText. |
Unconnected |
![]()
Сообщение
#13
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Значит, там рисованное всё.. Прикольно, при вводе текста в адресную строку каждый символ наверное удаляется и перерисовывается ) Наверное, им сложнее внутри программы брать caption-ы, нарисованный-то не так просто взять.
О содержимом адресной строки почти в любом браузере можно догадаться по его заголовку. А подменить - просто отрисовать поверх настоящего эдита - поддельный, с нужным адресом... На правах мыслей вслух) -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
![]() ![]() |
![]() |
Текстовая версия | 17.07.2025 7:56 |