Здравствуйте, Tom, Вы писали:
Tom>Есть окно. На окне могут лежать контролы + быть что то нарисованно. Надо получить изображение этого окна как HBITMAP.
Очевидно, что окно не обязано иметь битмапу, в которой хранится ее изображение (на все окна — ресурсов не напасешься). Оно рисует себя в графический контекст.
Отсюда:
— если окно ничем сверху не закрыто, то
1. получаешь контекст окна (GetWindowDC)
2. создаешь промежуточный контекст (CreateCompatibleDC), в нем — битмапу (внимание! по умолчанию битмапа черно-белая)
3. копируешь содержимое из оконного в промежуточный (BitBlt)
4. выгружаешь битмапу из контекста.
Поскольку контекст окна — это обкусанный фрагмент контекста дисплея (с учетом закрытых вышележащими окнами участков), то попытка скопировать перекрытый участок даст изображение из видеопамяти — некий коллаж из твоего и чужих окон.
То же относится и к полупрозрачным окнам.
— можно попробовать заставить окно прорисоваться в твой рукодельный контекст
(я не пробовал ).
Здравствуйте, adontz, Вы писали:
A>PS не знаю что выйдет, но вроде лучше чем alt-printscreen слать. Не ясно как он себя ведёт если окно не имеет фокуса.
Про alt-printscreen это естественно шутка
Q161299. HOWTO: Capture and Print the Screen, a Form, or Any Window
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Гсопода, а почему никто не вспомнил про WM_PRINT? Или я чего недоглядел? Наиболее правильный способ, как я помню — послать окну WM_PRINT. Остальные дают артефакты при наложении других окошек и т.п.
Читаем http://www.fengyuan.com/article/wmprint.html
Tom>сабж
Здравствуйте, Andrew S, Вы писали:
AS>Гсопода, а почему никто не вспомнил про WM_PRINT? Или я чего недоглядел? Наиболее правильный способ, как я помню — послать окну WM_PRINT. Остальные дают артефакты при наложении других окошек и т.п. AS>Читаем http://www.fengyuan.com/article/wmprint.html
Tom>>сабж
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
OE>Только вместо GetDesktopWindow вставь свой HWND
естественно прямое копирование будет работать только для неперекрытых никем окон
нужно попросить окно перерисоваться самому в подсунутом контексте...
... << RSDN@Home 1.0 beta 4 >> silent
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
И?? чем отличается этот код от кода в постинге Александра Федотова или Old->etc? Ровно так же получаем DC окна и Blt его на MemoryDC.
// Copy the window contents to the memory surface.
BitBlt(hdcMemory, 0, 0, rc.right, rc.bottom, hdcWindow, 0, 0, SRCCOPY);
Ровно так же обламываемся при перекрытии окна другими... Ну, а что выводит его на принтер — а нам то это нафиг? Или я что недопонял????
V>или смотрим Q186736 там тоже не дураки сидят
естественно ты прав, поэтому твой ответ и мною оценен, а не указанные тобой другие посты... кстати я это же отметил у старого экспериментатора и отвтил уже...
а по поводу моей ссылки — нужно учесть что я немного прикололся, смайлик е?
имею ввиду что ребята сами предлагают решения которые имеют глюки (указанные тобой) и размножают их через свою KB откуда они вполне могли переползти и в опять же указанные тобой посты! объяснил?
сорри что действительно сам через свой этот ответ начал вводить в заблуждение
AS>Ровно так же обламываемся при перекрытии окна другими... Ну, а что выводит его на принтер — а нам то это нафиг? Или я что недопонял????
V>>или смотрим Q186736 там тоже не дураки сидят
... << RSDN@Home 1.0 beta 4 >> silent
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Угу. Зато я понял, что книгу Фень Юаня не только must have, но и must read. Иначе ни о каком программировании графики под win32 и речи быть не может. Вот только с поллитрами в отношении DIBSection у него там мутно все рассказано. Ну да на пустом месте сам раком станешь...