![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 08.02.2009
Сообщений: 16
|
![]()
Через функцию bitblt копирую область из заданного окна на битмап destimage
Код:
Последний раз редактировалось ram555x; 12.08.2015 в 21:41. |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 08.02.2009
Сообщений: 16
|
![]()
Кажись нашел альтернативу
Код:
Если у кого есть еще какие варианты решения, пишите. |
![]() |
![]() |
![]() |
#3 | |
Форумчанин
Регистрация: 30.06.2015
Сообщений: 353
|
![]() Цитата:
Все как раз с ног сбились как копировать перекрытое/свёрнутое/задвинутое окно. И 100% решения нету. PrintWindow как раз более-менее неплохой вариант выдаёт. |
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 08.02.2009
Сообщений: 16
|
![]()
bitblt тестил на windows 7 которая на ноуте стоит, а так проверял работу этой функции через виртуальную машину virtualbox, там на windows 8.1, так же работает, а вот на windows XP не хочет. Мне вообще нужно было чтобы область скринилась и при сворачивании окна, но в итоге решил перехватывать событие свертывания окна и помещать его за пределами экрана.
|
![]() |
![]() |
![]() |
#5 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
![]()
На Windows c WDDI поведение вполне могло поменяться, особенно с включенным Aero. Раз теперь окно -- поверхность DirectX, и работа с ним по-другому ведется. Поменялась реализация -- поменялось и поведение.
В разработке: воспроизводственный контур ИТ
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 30.06.2015
Сообщений: 353
|
![]()
Я ж и не говорил что не могло поменяться. Просто сиё странно и неожиданно. В XP и раньше окно в принципе не рисуется в тех местах где оно закрыто.
Или если задвинуто - область тоже не рисуется. И из DC просто нельзя получить того чего там нету. Функция PrintWindow() рисует при помощи отправки окну сообщений WM_ERASEBKGND + WM_PRINT + WM_PRINTCLIENT вроде как-то вдобавок контролируя окном владеет чужой процесс или нет (хотя не помню где это слышал). Думаю ничего другого дельного вы не найдёте. |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 08.02.2009
Сообщений: 16
|
![]()
А еще вопросик по поводу эффективности использования printwindow, если мне к примеру нужно всю область окна получить только один раз при запуске, а потом только скринить определенную часть этого окна примерно каждые 3-5сек., вот разумно будет использовать данную функцию так часто? Или есть возможность как то через printwindow еще задать область окна которую надо получить? А то получается, что ради получения области 45x45, скриним область окна грубо 1000х1000. Так то проверил никаких дефектов отрисовки не заметил, если что данная функция у меня в отдельном потоке работает, и скринится хэндл flash-игры поэтому еще ближе к нужной области не подберешься.
Последний раз редактировалось ram555x; 12.08.2015 в 21:30. |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 30.06.2015
Сообщений: 353
|
![]()
уууу... Предрекаю - флеш догадается что его дурят.
![]() Как мы видим PrintWindow() не принимает таких параметров. А BitBlt() и StretchBlt() могут. Функции рисования в ОС постоянно работают, тыщи раз в секунду, им без разницы. Но советую до рисований API делать Canvas.Lock; и Canvas.Unlock; после. |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 08.02.2009
Сообщений: 16
|
![]()
А в каком смысле флэш догадается что его дурят?) Я до printwindow с помощью BitBlt() и обходился, но вот нашлись пользователи на XP до сих сидящии, и приходится более универсальное решение находить.
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
c# и bitblt | LOST94 | C# (си шарп) | 2 | 25.06.2013 16:46 |
Управление LPT под winXP | maestrog | Общие вопросы Delphi | 1 | 03.04.2009 01:26 |
Нужна прога под WinXP/Vista. Плачу Webmoney. | Garza | Фриланс | 3 | 16.01.2008 09:50 |