Форум "Delphi"
Паскаль, Делфи
Грабер битмапов в риалтаймеВопрос к знатокам WindowsAPI. Имеем хендл окна запущеной программы(чужой), если можно то как с помощью своей программы обойти все подчиненные объекты (окна) и сохранить во внешние файлы всю графику, которая используется в этих объектах.
|
|
#1 Phoroon © 19.06.07 09:56:33
В теории. 1 Нужно найти окно. Перебираем все компоненты и ищем с нужными классами. 2 Рисунок можно вытащить только с компонента(пример: TImage) 3 Если это рисунок на канве, то делать скриншот по координатам рисунка. 4 Класс TImage можно представить, как окно. Следовательно можно пользоваться чем-то типа GetWindowIcon(щас delphi нет, так что это не точно) 5 Ну а там получил handle bitmap, и можно запихивать в свою переменную. Надо не забыть установить размеры и pixelformat:=pf24, а то может и не сработать(это не иконка). |
|
Найти окно не проблема. Его хендл есть. А вот как перебирать компоненты в чужом приложении? Там есть только классы окон, и никаких компонент близко не видно. Или я ошибаюсь? Битмапы же окнами не являются. Правильно? Но у каждого окна должен быть список битмапов, чтоб окно знало как себя при необходимости прорисовать. Вот этот момент и хочется прояснить. > 4 Класс TImage можно представить, как окно. Разве? Не силен в низкоуровневом апи, но это мне кажется заблуждением. Класс TImage - это грубо говоря - битмап. А битмап и окно вещи разные. |
|
#3 Phoroon © 21.06.07 18:31:01
> Разве? Не силен в низкоуровневом апи, но это мне кажется > заблуждением. Класс TImage - это грубо говоря - битмап. > А битмап и окно вещи разные. Я имел ввиду, то что компонент TImage это отдельный компонент, на котором находится канва. Соответсвенно можно предположить, что Bitmap на нем, можно вырвать, примерно в стиле как пришлось бы c окном. |
|
#4 Ketmar © 23.06.07 10:36:52
> Но у каждого окна должен быть список битмапов, чтоб окно > знало как себя при необходимости прорисовать. Вот этот момент > и хочется прояснить. это таки да. только совсем не обязательно их хранить как дочерние окна. в общем случае задача нерешаема. в частном -- можно, например, сшотить цельное окно. %-) или перехватить BitBlt() сотоварищи и тогда уже нагло спереть. |
Написать ответ |
|
