Как из HWND получить HBITMAP ?
От: Tom Россия http://www.RSDN.ru
Дата: 14.01.03 15:21
Оценка:
сабж
Народная мудрось
всем все никому ничего(с).
Re: Как из HWND получить HBITMAP ?
От: TK Лес кывт.рф
Дата: 14.01.03 15:22
Оценка: 5 (1)
Здравствуйте, Tom, Вы писали:

Tom>сабж


Активизируй его. Пошли туда Alt-PrintScreen. Забери из буфера обмена
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: Как из HWND получить HBITMAP ?
От: vasketsov Россия http://ntprog.by.ru
Дата: 14.01.03 15:34
Оценка: +1
Здравствуйте, Tom, Вы писали непонятные вещи.

http://rsdn.ru/howtoask.htm
Васкецов Сергей
http://registry.km.ru
Re[2]: Как из HWND получить HBITMAP ?
От: TK Лес кывт.рф
Дата: 14.01.03 15:38
Оценка: 5 (1)
Здравствуйте, vasketsov, Вы писали:

V>Здравствуйте, Tom, Вы писали непонятные вещи.


А что не понятного?

Есть окно (HWND). Нужно получить то, что оно отображает (HBITMAP).
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Как из HWND получить HBITMAP ?
От: Tom Россия http://www.RSDN.ru
Дата: 14.01.03 15:40
Оценка:
Есть окно. На окне могут лежать контролы + быть что то нарисованно. Надо получить изображение этого окна как HBITMAP.
Народная мудрось
всем все никому ничего(с).
Re[3]: Как из HWND получить HBITMAP ?
От: vasketsov Россия http://ntprog.by.ru
Дата: 14.01.03 15:44
Оценка: :))
Здравствуйте, TK, Вы писали:

TK>А что непонятного?


Например, такой вариант:
На (HBITMAP)hWnd ругается компилятор, как его успокоить?
Васкецов Сергей
http://registry.km.ru
Re[4]: Как из HWND получить HBITMAP ?
От: TK Лес кывт.рф
Дата: 14.01.03 15:46
Оценка:
Здравствуйте, vasketsov, Вы писали:

TK>>А что непонятного?


V>Например, такой вариант:

V>На (HBITMAP)hWnd ругается компилятор, как его успокоить?

Круто Но ничего не выйдет.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: Как из HWND получить HBITMAP ?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 14.01.03 15:49
Оценка:
Здравствуйте, Tom, Вы писали:

Можно
Создать DC,
Создать HBITMAP
Выбрать его в DC
Послать окну сообщение WM_REDRAW указав в параметрах свой DC.

PS не знаю что выйдет, но вроде лучше чем alt-printscreen слать. Не ясно как он себя ведёт если окно не имеет фокуса.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: Как из HWND получить HBITMAP ?
От: Кодт Россия  
Дата: 14.01.03 15:53
Оценка: 10 (1)
Здравствуйте, Tom, Вы писали:

Tom>Есть окно. На окне могут лежать контролы + быть что то нарисованно. Надо получить изображение этого окна как HBITMAP.


Очевидно, что окно не обязано иметь битмапу, в которой хранится ее изображение (на все окна — ресурсов не напасешься). Оно рисует себя в графический контекст.

Отсюда:

— если окно ничем сверху не закрыто, то
1. получаешь контекст окна (GetWindowDC)
2. создаешь промежуточный контекст (CreateCompatibleDC), в нем — битмапу (внимание! по умолчанию битмапа черно-белая)
3. копируешь содержимое из оконного в промежуточный (BitBlt)
4. выгружаешь битмапу из контекста.

Поскольку контекст окна — это обкусанный фрагмент контекста дисплея (с учетом закрытых вышележащими окнами участков), то попытка скопировать перекрытый участок даст изображение из видеопамяти — некий коллаж из твоего и чужих окон.
То же относится и к полупрозрачным окнам.

— можно попробовать заставить окно прорисоваться в твой рукодельный контекст
(я не пробовал ).
Перекуём баги на фичи!
Re: Как из HWND получить HBITMAP ?
От: old->*Plutonia_Experiment() Беларусь http://blogs.rsdn.org/ikemefula
Дата: 14.01.03 15:53
Оценка: 10 (1)
Здравствуйте, Tom, Вы писали:

Tom>сабж


http://www.rsdn.ru/Forum/Message.aspx?mid=15260&only=1
Автор: Alex Fedotov
Дата: 30.11.01


Только вместо GetDesktopWindow вставь свой HWND
Re[2]: Как из HWND получить HBITMAP ?
От: TK Лес кывт.рф
Дата: 14.01.03 15:54
Оценка: 10 (1)
Здравствуйте, adontz, Вы писали:

A>PS не знаю что выйдет, но вроде лучше чем alt-printscreen слать. Не ясно как он себя ведёт если окно не имеет фокуса.


Про alt-printscreen это естественно шутка

Q161299. HOWTO: Capture and Print the Screen, a Form, or Any Window
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: Как из HWND получить HBITMAP ?
От: Andrew S Россия http://alchemy-lab.com
Дата: 14.01.03 16:24
Оценка: 49 (4)
Гсопода, а почему никто не вспомнил про WM_PRINT? Или я чего недоглядел? Наиболее правильный способ, как я помню — послать окну WM_PRINT. Остальные дают артефакты при наложении других окошек и т.п.
Читаем http://www.fengyuan.com/article/wmprint.html

Tom>сабж
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: Как из HWND получить HBITMAP ?
От: Andrew S Россия http://alchemy-lab.com
Дата: 14.01.03 16:29
Оценка:
Нормально работает только для top окон. При перекрытии другими фигня получается

O>Только вместо GetDesktopWindow вставь свой HWND
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: Как из HWND получить HBITMAP ?
От: Valerio Россия linkedin.com/in/boronin
Дата: 14.01.03 17:19
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>Гсопода, а почему никто не вспомнил про WM_PRINT? Или я чего недоглядел? Наиболее правильный способ, как я помню — послать окну WM_PRINT. Остальные дают артефакты при наложении других окошек и т.п.

AS>Читаем http://www.fengyuan.com/article/wmprint.html

Tom>>сабж


или смотрим Q186736 там тоже не дураки сидят
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.
Re[2]: Как из HWND получить HBITMAP ?
От: Valerio Россия linkedin.com/in/boronin
Дата: 14.01.03 17:23
Оценка:
OE>http://www.rsdn.ru/Forum/Message.aspx?mid=15260&only=1
Автор: Alex Fedotov
Дата: 30.11.01


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.
Re[3]: Как из HWND получить HBITMAP ?
От: Andrew S Россия http://alchemy-lab.com
Дата: 14.01.03 17:43
Оценка:
И?? чем отличается этот код от кода в постинге Александра Федотова или 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 там тоже не дураки сидят
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[4]: Как из HWND получить HBITMAP ?
От: Valerio Россия linkedin.com/in/boronin
Дата: 14.01.03 17:53
Оценка:
естественно ты прав, поэтому твой ответ и мною оценен, а не указанные тобой другие посты... кстати я это же отметил у старого экспериментатора и отвтил уже...

а по поводу моей ссылки — нужно учесть что я немного прикололся, смайлик е?

имею ввиду что ребята сами предлагают решения которые имеют глюки (указанные тобой) и размножают их через свою 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.
Re[5]: Как из HWND получить HBITMAP ?
От: Andrew S Россия http://alchemy-lab.com
Дата: 14.01.03 18:16
Оценка:
Угу. Зато я понял, что книгу Фень Юаня не только must have, но и must read. Иначе ни о каком программировании графики под win32 и речи быть не может. Вот только с поллитрами в отношении DIBSection у него там мутно все рассказано. Ну да на пустом месте сам раком станешь...
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re: Как из HWND получить HBITMAP ?
От: old->*Plutonia_Experiment() Беларусь http://blogs.rsdn.org/ikemefula
Дата: 15.01.03 08:19
Оценка:
Здравствуйте, Tom, Вы писали:

Можно сделать так.
Находим главное окно аппликации.
Заставляем его всплыть. На сайте про это много постов.
Далее грабим. И все.

Вместо всплывания можно создать десктоп еще один и засунуть окно туда. А потом десктоп грохнуть.
В MSDN есть примерчик с десктопами.
Re[2]: Как из HWND получить HBITMAP ?
От: Alex Fedotov США  
Дата: 15.01.03 08:20
Оценка:
Здравствуйте, old->*Plutonia_Experiment(), Вы писали:

O>Вместо всплывания можно создать десктоп еще один и засунуть окно туда.


Нельзя. Нельзя взять окно с одного десктопа и переназначить другому.
-- Alex Fedotov
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.