Как из 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
Re[3]: Как из HWND получить HBITMAP ?
От: TK Лес кывт.рф
Дата: 15.01.03 08:26
Оценка:
Здравствуйте, Alex Fedotov, Вы писали:

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


AF>Нельзя. Нельзя взять окно с одного десктопа и переназначить другому.


Точно? А как тогда работают различные утилиты для управления десктопами? Пункт "отправить окно в десктоп XXX" там никто не отменял...
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[3]: Как из HWND получить HBITMAP ?
От: old->*Plutonia_Experiment() Беларусь http://blogs.rsdn.org/ikemefula
Дата: 15.01.03 08:29
Оценка:
Здравствуйте, Alex Fedotov, Вы писали:

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


AF>Нельзя. Нельзя взять окно с одного десктопа и переназначить другому.


А как это эмулируют проги-мультидесктопы ? Я сам десктопы не ковырял просто.
Re: Как из HWND получить HBITMAP ?
От: SlaG  
Дата: 15.01.03 09:09
Оценка: 6 (1)
Лучше так:
1. создаешь compatible dc, инициализируешь — смотри код, как писали выше.
2. А теперь внимание:
SendMessage(hwnd, WM_ERASEBKGND, (WPARAM)hCompatibleDC, 0);
SendMessage(hwnd, WM_PAINT, (WPARAM)hCompatibleDC, 0);
и содержимое окна рисуется в наш DC (без наложения других окон).
3. забираешь bitmap у нашего DC.

P.S. Хотя в MSDN написано, что первый параметр для WM_PAINT "not used", но это работает — факт.
Re[2]: Как из HWND получить HBITMAP ?
От: Andrew S Россия http://alchemy-lab.com
Дата: 15.01.03 11:21
Оценка:
SG>P.S. Хотя в MSDN написано, что первый параметр для WM_PAINT "not used", но это работает — факт.

В MSDN написано

For some common controls, the default WM_PAINT message processing checks the wParam parameter. If wParam is non-NULL, the control assumes that the value is an HDC and paints using that device context.


Но как я помню, само окно не обязано рассматривать wparam как контекст устройства и тем более туда писать. Оно получает свой контекст из BeginPaint. Тем не менее попробую — интересно, вдруг и правда работает.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: Как из HWND получить HBITMAP ?
От: Andrew S Россия http://alchemy-lab.com
Дата: 15.01.03 11:56
Оценка:
Ну что ж. Это не работает. Факт. Система — win2k


        HWND hWnd = FindWindow(NULL, "WinZip");
        HDC hDC = GetWindowDC(hWnd);
        HDC hMemDC = CreateCompatibleDC(hDC);
        RECT theRect;
        GetWindowRect(hWnd, &theRect);
        int x =  theRect.right - theRect.left;
        int y = theRect.bottom - theRect.top;
        HBITMAP hBitmap = CreateCompatibleBitmap(hDC, x, y);
        SelectObject(hMemDC, (HGDIOBJ)hBitmap);
        SendMessage(hWnd, WM_ERASEBKGND, (WPARAM)hMemDC, 0); 
        SendMessage(hWnd, WM_PAINT, (WPARAM)hMemDC, 0);
        BitBlt(hMemDC, 0,0, x, y,hDC, 0,0, SRCCOPY);
        ReleaseDC(hWnd, hDC);
        CreateBMPFile("1.bmp", CreateBitmapInfoStruct(hBitmap), hBitmap, hMemDC);
        DeleteDC(hMemDC);
        DeleteObject(hBitmap);


WinZip скрыт за окном вижал студии. Без сообщений копируется кусок картинки экрана "над" винзипом
С сообщениями делается ровно то же. Any suggestions?

SG>Лучше так:

SG>1. создаешь compatible dc, инициализируешь — смотри код, как писали выше.
SG>2. А теперь внимание:
SG>SendMessage(hwnd, WM_ERASEBKGND, (WPARAM)hCompatibleDC, 0);
SG>SendMessage(hwnd, WM_PAINT, (WPARAM)hCompatibleDC, 0);
SG>и содержимое окна рисуется в наш DC (без наложения других окон).
SG>3. забираешь bitmap у нашего DC.

SG>P.S. Хотя в MSDN написано, что первый параметр для WM_PAINT "not used", но это работает — факт.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[3]: Как из HWND получить HBITMAP ?
От: Andrew S Россия http://alchemy-lab.com
Дата: 15.01.03 14:00
Оценка:
Маленькое уточнение — стормозил и забыл убрать при тестах с сообщениями BitBlt. Когда убрал — получается пустой битмап с черным фоном. Видимо, другого способа, кроме как описанного у Фень Юаня, нет.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[4]: Как из HWND получить HBITMAP ?
От: Кодт Россия  
Дата: 15.01.03 15:12
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>Маленькое уточнение — стормозил и забыл убрать при тестах с сообщениями BitBlt. Когда убрал — получается пустой битмап с черным фоном. Видимо, другого способа, кроме как описанного у Фень Юаня, нет.


Скорее всего, это результат использования CreateCompatibleBitmap.
Она создает ЧЕРНО-БЕЛУЮ битмапу!!! Это классическейшие грабли.

Сделай для разнообразия CreateBitmap с TrueColor.
Перекуём баги на фичи!
Re[5]: Как из HWND получить HBITMAP ?
От: Andrew S Россия http://alchemy-lab.com
Дата: 15.01.03 15:49
Оценка:
Еще раз. При использовании BitBlt все работает. Сохраняется часть экрана над WinZip.
Вы код то посмотрите — я его привел... Для разнообразия :/

AS>>Маленькое уточнение — стормозил и забыл убрать при тестах с сообщениями BitBlt. Когда убрал — получается пустой битмап с черным фоном. Видимо, другого способа, кроме как описанного у Фень Юаня, нет.


К>Скорее всего, это результат использования CreateCompatibleBitmap.

К>Она создает ЧЕРНО-БЕЛУЮ битмапу!!! Это классическейшие грабли.

Чушь. В файл сохраняется битмапа с цветностью экрана... Вобщем, видимо, не стоит думать, что мы тут умнее Фень Юаня. Было бы можно проще — он бы так и сделал.
К>Сделай для разнообразия CreateBitmap с TrueColor.

PS
Внимательнее читайте постинги.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[5]: Как из HWND получить HBITMAP ?
От: Andrew S Россия http://alchemy-lab.com
Дата: 15.01.03 15:54
Оценка:
К>Она создает ЧЕРНО-БЕЛУЮ битмапу!!! Это классическейшие грабли.

Читать постинги надо и пользоваться MSDN Когда не читают — это действительно классические грабли :/

Because memory device contexts allow both color and monochrome bitmaps, the format of the bitmap returned by the CreateCompatibleBitmap function differs when the specified device context is a memory device context. However, a compatible bitmap that was created for a nonmemory device context always possesses the same color format and uses the same color palette as the specified device context.



        HBITMAP hBitmap = CreateCompatibleBitmap(hDC, x, y);
        SelectObject(hMemDC, (HGDIOBJ)hBitmap);


Теперь видно?
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[6]: Как из HWND получить HBITMAP ?
От: Кодт Россия  
Дата: 15.01.03 15:59
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>Внимательнее читайте постинги.


Прости. Действительно.
Перекуём баги на фичи!
Re: Почитай MSDN - там это подробно описано.
От: Аноним  
Дата: 22.01.03 09:17
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>сабж
Re[2]: Почитай MSDN - там это подробно описано.
От: old->*Plutonia_Experiment() Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.01.03 09:39
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Tom, Вы писали:


Tom>>сабж


Нюню...
Re[2]: Почитай MSDN - там это подробно описано.
От: Andrew S Россия http://alchemy-lab.com
Дата: 22.01.03 10:53
Оценка:
Аноним, представься А еще желательно видеть конкретные ссылки на топики MSDN где ЭТО подробно описано. Точнее не само это, как это ПРАВИЛЬНО сделать, а не то, что предлагает m$
Tom>>сабж
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re: Как из HWND получить HBITMAP ?
От: Аноним  
Дата: 22.01.03 13:46
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>сабж

Получить HDC и с ним делать, что хочешь
Re[2]: Как из HWND получить HBITMAP ?
От: Andrew S Россия http://alchemy-lab.com
Дата: 22.01.03 13:58
Оценка:
Уважаемый Аноним. Прочитайте пожалуйста ВСЕ постинги...
А>Получить HDC и с ним делать, что хочешь
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re: Как из HWND получить HBITMAP ?
От: Tom Россия http://www.RSDN.ru
Дата: 23.01.03 12:12
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>сабж


В общем как сделал я:

1. Создаём компатибле HDC на память.
2. Создаём компатибле BITMAP с соответствующимиразмерами и селектим его в наш битмап.
3. Делаем BitBlt из HDC формы в наш, который на памяти.
4. Ещё раз делаем селект и получаем нашь BITMAP с содержимым формы.


PS: Проверял правда только на NT
Народная мудрось
всем все никому ничего(с).
Re[2]: Как из HWND получить HBITMAP ?
От: Кодт Россия  
Дата: 23.01.03 12:28
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>1. Создаём компатибле HDC на память.

Tom>2. Создаём компатибле BITMAP с соответствующимиразмерами и селектим его в наш битмап.
Tom>3. Делаем BitBlt из HDC формы в наш, который на памяти.
Tom>4. Ещё раз делаем селект и получаем нашь BITMAP с содержимым формы.

Tom>PS: Проверял правда только на NT

И еще добавь: для окна, ничем сверху не перекрытого.

См. остальные сообщения этой ветки. Тут уже много сказано.
Перекуём баги на фичи!
Re[2]: Как из HWND получить HBITMAP ?
От: Тигра Беларусь  
Дата: 21.04.03 10:46
Оценка:
Здравствуйте, old->*Plutonia_Experiment(), Вы писали:

OP>Можно сделать так.

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

Встречный вопрос: а если требуется "грабануть" не главное окно аппликации, а дочернее окно / контрол ? (Их то не заставишь вспыть!)
Можно конечно заставить всплыть родительское окно для требуемого дочернего...
Кроме того — проблема с перекрыванием нашего окна каким-либо TopLevel окном остаётся.
И даже если проверять, сохранять, изменять, и восстанавливать аттрибут TopLevel у нашего окна (что не есть красивое решение, имхо), всё равно остаётся проблема в случае с частично видимым (или полностью невидимым) окном — не думаю, что двигать /(показывать и прятать) искомое окно — это выход.
Так что не проходит.

OP>Вместо всплывания можно создать десктоп еще один и засунуть окно туда. А потом десктоп грохнуть.

OP>В MSDN есть примерчик с десктопами.

Ну зачем всё усложнять-то так?!
Re: Как из HWND получить HBITMAP ?
От: Signatec Россия  
Дата: 06.01.05 16:16
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>сабж


The PrintWindow function copies a visual window into the specified device context (DC), typically a printer DC.
Re[2]: Как из HWND получить HBITMAP ?
От: mOzG573  
Дата: 22.11.05 12:51
Оценка:
invoke GetDC,windhand
mov hDC,eax

invoke CreateCompatibleDC,hDC
mov hMemDC,eax



invoke CreateCompatibleBitmap,hDC,1024,768
mov hBitmap,eax
invoke SelectObject,hMemDC,hBitmap

invoke SendMessage,windhand,WM_PAINT,hMemDC,0
invoke SendMessage,windhand,WM_ERASEBKGND,hMemDC,0

invoke BitBlt,hMemDC,0,0,1024,768,hDC,0,0,SRCCOPY
invoke ReleaseDC,windhand,hDC


invoke GetPixel,hMemDC,1000,5
mov Color,eax

Pls obysnite 4ego en prawelno delay pri otkritom oktne wse normalno beretza nujnii pixel a wot kogda sakrito okno todrugim ili swernuto ne pomogart hoty wrode kak WM_PAINT posilay moemu oknu , wesi topik pro4ital no ne kak ne ponyl w 4em sagwoska
Re[3]: Как из HWND получить HBITMAP ?
От: kero Россия  
Дата: 22.11.05 22:05
Оценка:
Здравствуйте, mOzG573, Вы писали:

OG> invoke GetDC,windhand

OG> mov hDC,eax

OG> invoke CreateCompatibleDC,hDC

OG> mov hMemDC,eax



OG> invoke CreateCompatibleBitmap,hDC,1024,768

OG> mov hBitmap,eax
OG> invoke SelectObject,hMemDC,hBitmap

OG> invoke SendMessage,windhand,WM_PAINT,hMemDC,0

OG> invoke SendMessage,windhand,WM_ERASEBKGND,hMemDC,0

OG> invoke BitBlt,hMemDC,0,0,1024,768,hDC,0,0,SRCCOPY

OG> invoke ReleaseDC,windhand,hDC


OG> invoke GetPixel,hMemDC,1000,5

OG> mov Color,eax

OG>Pls obysnite 4ego en prawelno delay pri otkritom oktne wse normalno beretza nujnii pixel a wot kogda sakrito okno todrugim ili swernuto ne pomogart hoty wrode kak WM_PAINT posilay moemu oknu , wesi topik pro4ital no ne kak ne ponyl w 4em sagwoska



"ili swernuto" — это отбросим

Вот фрагмент рабочего кода для XP с PrintWindow, может извлечете что-то для себя полезное:

  invoke GetWindowRect,hwnd2,addr rect2  ;  hwnd2 - нужное окно
  
  invoke GetAncestor,hwnd2,GA_ROOT ; GA_ROOTOWNER
  mov hwnd,eax 
  invoke GetWindowRect,hwnd,addr rect
  
  invoke IsWindowVisible,hwnd
  mov flag,eax
  .if eax==0
      invoke SetWindowPos,hwnd,0,-3000,0,0,0,SWP_NOZORDER or SWP_NOSIZE or SWP_NOACTIVATE
      invoke SetWindowPos,hwnd,0,0,0,0,0,SWP_NOZORDER or SWP_NOSIZE or SWP_NOACTIVATE or SWP_NOMOVE or SWP_SHOWWINDOW
  .endif
  
  invoke GetWindowDC,hwnd
  mov hdc,eax
; invoke GetDesktopWindow
  xor eax,eax    
  mov hwnd0,eax
  invoke GetDC,eax
  mov hdc0,eax
  
  invoke CreateCompatibleDC,hdc0
  mov hdcmem,eax
  
  mov eax,rt.right
  sub eax,rt.left
  mov ecx,rt.bottom
  sub ecx,rt.top
  invoke CreateCompatibleBitmap,hdc,eax,ecx
  mov hbmp,eax
  invoke SelectObject,hdcmem,hbmp
  mov hobj,eax
  
  invoke PrintWindow,hwnd,hdcmem,0
  
  invoke CreateCompatibleDC,hdc0
  mov hdcmem2,eax
  
  mov eax,rt2.right
  sub eax,rt2.left
  mov _w2,eax
  mov ecx,rt2.bottom
  sub ecx,rt2.top
  mov _h2,ecx
  invoke CreateCompatibleBitmap,hdc,eax,ecx
  mov hbmp2,eax
  invoke SelectObject,hdcmem2,hbmp2
  mov hobj2,eax
  
  mov eax,rt2.left
  sub eax,rt.left
  mov ecx,rt2.top
  sub ecx,rt.top
  invoke BitBlt,hdcmem2,0,0,_w2,_h2,hdcmem,eax,ecx,SRCCOPY
  
; invoke GetPixel,hdcmem2,pt.x,pt.y   ;  место для выкусывания пикселя  :-)
  
  invoke SelectObject,hdcmem,hobj
  invoke DeleteDC,hdcmem
  invoke SelectObject,hdcmem2,hobj2
  invoke DeleteDC,hdcmem2
  
; invoke OpenClipboard,hwnd
  invoke OpenClipboard,hwnd0
  invoke EmptyClipboard 
  invoke SetClipboardData,CF_BITMAP,hbmp2
  invoke CloseClipboard
  
  .if flag==0
      invoke SetWindowPos,hwnd,0,0,0,0,0,SWP_NOZORDER or SWP_NOSIZE or SWP_NOACTIVATE or SWP_NOMOVE or SWP_HIDEWINDOW
      invoke SetWindowPos,hwnd,0,rt.left,rt.top,0,0,SWP_NOZORDER or SWP_NOSIZE or SWP_NOACTIVATE
  .endif
  
  invoke DeleteObject,hbmp
  invoke DeleteObject,hbmp2
  invoke ReleaseDC,hwnd0,hdc0
  invoke ReleaseDC,hwnd,hdc
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[4]: Как из HWND получить HBITMAP ?
От: Аноним  
Дата: 23.11.05 04:18
Оценка:
Конечно, по-хорошему надо было бы запросить IsWindowVisible для ВСЕЙ цепочки от hwnd2 до hwnd, сохранить результат, сделать Visible каждого в цепочке,
а в конце — восстановить исходную конфигурацию... но пусть уж остается как есть
Re[5]: Как из HWND получить HBITMAP ?
От: kero Россия  
Дата: 23.11.05 04:26
Оценка:
А>Конечно, по-хорошему надо было бы запросить IsWindowVisible для ВСЕЙ цепочки от hwnd2 до hwnd, сохранить результат, сделать Visible каждого в цепочке,
А>а в конце — восстановить исходную конфигурацию... но пусть уж остается как есть

Ай, забыл войти с парадного входа
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[6]: Как из HWND получить HBITMAP ?
От: mOzG573  
Дата: 23.11.05 21:34
Оценка:
wot tolko nepoimy kopiruetza okno s clienskoi 4astiy 4ernoi
Re[7]: Как из HWND получить HBITMAP ?
От: mOzG573  
Дата: 23.11.05 23:20
Оценка:


wot takay gadosty glawnoe title proresowiwaetza a wnutri okna 4ernota podkajite 4ego eto mojet bity
Re[8]: Как из HWND получить HBITMAP ?
От: Antech  
Дата: 24.11.05 06:33
Оценка:
Это может быть Direct3D. Что за программа? Видеоплеер?
Re[9]: Как из HWND получить HBITMAP ?
От: mOzG573  
Дата: 24.11.05 11:09
Оценка:
Здравствуйте, Antech, Вы писали:

A>Это может быть Direct3D. Что за программа? Видеоплеер?



eto igra


strano esli prosto bral hDC i iskal tam pixel to wse normalno wot pomestil w pamyti i wot takay gadosty
Re[10]: Как из HWND получить HBITMAP ?
От: mOzG573  
Дата: 24.11.05 20:41
Оценка:
Здравствуйте, mOzG573, Вы писали:

OG>Здравствуйте, Antech, Вы писали:


A>>Это может быть Direct3D. Что за программа? Видеоплеер?



da pohoje eto Direct3D tak kak skajem okno mIRC normalno proresoswiwaet a wot igrowoe okno uje neho4et i odna 4ernota
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.