![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: 1 Всего: 31 |
приветствую!
есть задача - снять скриншот с окна чужого приложения или одного из его объектов. чего есть - 1) вопрос решен тут http://forum.vingrad.ru/faq/topic-157640.html 2) на основе инета (конечно же ![]()
где ScreenDC := GetDC($029604BC); - хэндл нужного мне объекта чужого окна. // для общего скриншота юзаем GetDC(0); проблема - часто, я бы даже сказал очень часто, нужное окно свернуто или перекрыто другими окнами. даже в случае скриншота рабочего стола, все равно видны окна. оба метода в таком случае не выдают желаемого результата, то есть чистой картинки, снятой с канвы. есть так же спасительный вариант, что в окне чужой программы предусмотрена автоперерисовка, но это скорее исключение, чем правило. вопрос - как снять изображение с канвы свернутого или перекрытого другими окнами объекта? Это сообщение отредактировал(а) CompWorm - 25.7.2007, 01:32 |
|||
|
||||
misha_mike |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 1.6.2007 Репутация: нет Всего: 1 |
Странно что всегда работает это:
Хендл это не глобальный идентификатор конкретного объекта, а просто ссылка на его экземпляр. При каждом создании объекта это число будет разным. А что касается самого вопроса, то если приложение само не захочет свою картинку одать, через канву ее не взять. Есть такое понятие как Clipping, обозначающее доступную для рисования/считывания область. Если какой-то контрол не попал в Clipping Area, то он себя просто не отрисовывает, и его изображение так сказать вообще не определено и никто не может знать как он должен выглядеть. Можно попробовать заставить его отрисоваться на созданную отдельно канву, для чего служат сообщения WM_ERASEBKGND и WM_PAINT, но с ними не всегда все гладко, как оказалось. |
|||
|
||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: 1 Всего: 31 |
ну это я естественно каждый раз беру с Winspector Spy... это я просто для примера число написал. ты имеешь в виду, что можно заставить отрисовывать чужое приложение свою канву напрямую в канву, скажем панели, моей программки? не мог бы пример показать плиз? и не мог бы ты уточнить проблемы, с которыми ты сталкивался... |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
посмотри решение на мастерах
-------------------- There are always someone smarter than you... |
|||
|
||||
misha_mike |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 1.6.2007 Репутация: нет Всего: 1 |
Ну пример можно посмотреть в исходнике TWinControl.PaintTo, где оба этих сообщения собственно используются. А проблемы тут могут быть со стилями XP/Vista и если отрисовкой контрола занимается не он сам, а например, его Parent.
|
|||
|
||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: 1 Всего: 31 |
Большое спасибо за помощь )
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |