Снимок неактивного окна?
От: Аноним  
Дата: 24.10.04 15:22
Оценка:
Здрасти. Как вы думаете можно ли сделать snapshot для любого окна под WindowsXP? И если можно, то как?
Re: Снимок неактивного окна?
От: BlackHeretic Израиль  
Дата: 24.10.04 16:27
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здрасти. Как вы думаете можно ли сделать snapshot для любого окна под WindowsXP? И если можно, то как?


Можно. Ctrl+PrntScr, потом вырезаете в редакторе свое окно. Если хочется сделать по привычному Alt+PrntScr, то откуда винда может знать что конкретно вы хотите...
Или я не понял вопрос?
ICQ 156156278
Re[2]: Снимок неактивного окна?
От: Аноним  
Дата: 24.10.04 18:00
Оценка:
Здравствуйте, BlackHeretic, Вы писали:

BH>Здравствуйте, Аноним, Вы писали:


А>>Здрасти. Как вы думаете можно ли сделать snapshot для любого окна под WindowsXP? И если можно, то как?


BH>Можно. Ctrl+PrntScr, потом вырезаете в редакторе свое окно. Если хочется сделать по привычному Alt+PrntScr, то откуда винда может знать что конкретно вы хотите...

BH>Или я не понял вопрос?
Это че мне генерировать нажатие кнопок надо с помощью SendMessage? Ну это по моему перебор. Мне же программно надо это сделать.
Нашел функцию PrintWindow, но работает только на новых ОС. А может есть способ для всех ОС? Кто знает?
Re: Снимок неактивного окна?
От: c-smile Канада http://terrainformatica.com
Дата: 24.10.04 18:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здрасти. Как вы думаете можно ли сделать snapshot для любого окна под WindowsXP? И если можно, то как?


Попробуй послать ему WM_PRINT

Успехов
Re[2]: Снимок неактивного окна?
От: Аноним  
Дата: 24.10.04 19:22
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, Аноним, Вы писали:


А>>Здрасти. Как вы думаете можно ли сделать snapshot для любого окна под WindowsXP? И если можно, то как?


CS>Попробуй послать ему WM_PRINT


CS>Успехов

Я всем подряд его шлю(WM_PRINT), но пока никто не откликунулся( Это нормально или я что-то не так делаю?
Re[3]: Снимок неактивного окна?
От: Pavel Dvorkin Россия  
Дата: 25.10.04 05:50
Оценка:
Привет!

Unknown wrote:
> Я всем подряд его шлю(WM_PRINT), но пока никто не откликунулся( Это нормально или я что-то не так делаю?

А как ты хочешь, чтобы они откликнулись ? Ты должен hdc передать в этом
сообщении, в котором они себя и нарисуют. В hdc должна быть выбрана hBmp

--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.9 gamma
With best regards
Pavel Dvorkin
Re[3]: Снимок неактивного окна?
От: Тигра Беларусь  
Дата: 25.10.04 09:03
Оценка:
Здравствуйте, Аноним, Вы писали:

CS>>Успехов

А>Я всем подряд его шлю(WM_PRINT), но пока никто не откликунулся( Это нормально или я что-то не так делаю?

Вообще-то WM-PRINT — это не панацея.
здесь
Автор: Тигра
Дата: 21.04.03
Re[4]: Снимок неактивного окна?
От: Andrew S Россия http://alchemy-lab.com
Дата: 25.10.04 09:39
Оценка:
CS>>>Успехов
А>>Я всем подряд его шлю(WM_PRINT), но пока никто не откликунулся( Это нормально или я что-то не так делаю?

Т>Вообще-то WM-PRINT — это не панацея.

Т>здесь
Автор: Тигра
Дата: 21.04.03


Вообще то — панацея. Идея и *относительно* кривая реализация — у Фень Юаня, остальное — дело времени и терпения.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[4]: Снимок неактивного окна?
От: Аноним  
Дата: 25.10.04 10:00
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Привет!


PD>Unknown wrote:

>> Я всем подряд его шлю(WM_PRINT), но пока никто не откликунулся( Это нормально или я что-то не так делаю?

PD>А как ты хочешь, чтобы они откликнулись ? Ты должен hdc передать в этом

PD>сообщении, в котором они себя и нарисуют. В hdc должна быть выбрана hBmp

PD>--

PD>With best regards,
PD> Pavel Dvorkin
А ты что думаешь я его просто так шлю, без Hdc? Это не мой способ работы — рассылать всем окнам сообщения с NULL параметрами! Все окна, кроме моего собственного возвращают черный экран, мое собственное окно возвращает все нормально.
Мда и про Вень Хуаня хочу сказать. Видел я его пример реализации и даже запускал пару раз. Но сразу настораживает, что не работает под 9х. И что после такого скриншота окну больше не жить. Смертельные скриншоты — это конечно прикольно, как предсмертное фото, но хотелось бы узнать можно ли сделать так, чтоб окно жило обычной жизнью после снимка?
Re: Снимок неактивного окна?
От: Аноним  
Дата: 25.10.04 10:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здрасти. Как вы думаете можно ли сделать snapshot для любого окна под WindowsXP? И если можно, то как?


И еще вопросец для знатоков. В Windows XP есть функция PrintWindow. Кто-нить имеет у себя dll с реализацией этой функцией для других ОС. Для не знающих(особо умных): если такая библиотека есть, то она реализована не m$. И делалась она путем дизассемблирования библиотек виндоус. Как это сделано для функции OpenThread для Windows 95. Которой в стандартном API не существует.
Re[5]: Снимок неактивного окна?
От: Pavel Dvorkin Россия  
Дата: 25.10.04 12:53
Оценка:
Привет!

Unknown wrote:
> А ты что думаешь я его просто так шлю, без Hdc? Это не мой способ работы — рассылать всем окнам сообщения с NULL параметрами! Все окна, кроме моего собственного возвращают черный экран, мое собственное окно возвращает все нормально.

Ну не знаю. Если у окна есть в настоящее время содержимое (т.е. оно
полностью не перекрыто) — у меня возвращало нормальную картинку. Если
полностью перекрыто, конечно, нет.

Давай код, посмотрю.

--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.9 gamma
With best regards
Pavel Dvorkin
Re[6]: Снимок неактивного окна?
От: Аноним  
Дата: 25.10.04 15:42
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Привет!


PD>Unknown wrote:

>> А ты что думаешь я его просто так шлю, без Hdc? Это не мой способ работы — рассылать всем окнам сообщения с NULL параметрами! Все окна, кроме моего собственного возвращают черный экран, мое собственное окно возвращает все нормально.

PD>Ну не знаю. Если у окна есть в настоящее время содержимое (т.е. оно

PD>полностью не перекрыто) — у меня возвращало нормальную картинку. Если
PD>полностью перекрыто, конечно, нет.

PD>Давай код, посмотрю.


PD>--

PD>With best regards,
PD> Pavel Dvorkin

Ну собственно код я взял из примера Фунь Хуаня(кажется так):
HDC hDCMem = CreateCompatibleDC(NULL);
RECT rect;
GetWindowRect(hWnd, & rect);
HBITMAP hBmp = NULL;
{
HDC hDC = GetDC(hWnd);
hBmp = CreateCompatibleBitmap(hDC, rect.right — rect.left, rect.bottom — rect.top);
ReleaseDC(hWnd, hDC);
}
HGDIOBJ hOld = SelectObject(hDCMem, hBmp);
SendMessage(hWnd, WM_PRINT, (WPARAM) hDCMem, PRF_CHILDREN | PRF_CLIENT | PRF_ERASEBKGND | PRF_NONCLIENT | PRF_OWNED);
SelectObject(hDCMem, hOld);
DeleteObject(hDCMem);
OpenClipboard(hWnd);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBmp);
CloseClipboard();

А hWnd собственно = GetForegroundWindow(). Надо потом окно нужное сделать активным и по таймеру мое приложение его в буфер и положит. Но кладет черный экран, если это не оно само.
Re[2]: Снимок неактивного окна?
От: Аноним  
Дата: 25.10.04 15:44
Оценка:
Здравствуйте, Аноним, Вы писали:

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


А>>Здрасти. Как вы думаете можно ли сделать snapshot для любого окна под WindowsXP? И если можно, то как?


А>И еще вопросец для знатоков. В Windows XP есть функция PrintWindow. Кто-нить имеет у себя dll с реализацией этой функцией для других ОС. Для не знающих(особо умных): если такая библиотека есть, то она реализована не m$. И делалась она путем дизассемблирования библиотек виндоус. Как это сделано для функции OpenThread для Windows 95. Которой в стандартном API не существует.


Ага я так понимаю нет не у кого. Хорошо тогда может кто ссылочки кинет на подобные сайты.
Re[5]: Снимок неактивного окна?
От: Аноним  
Дата: 25.10.04 15:47
Оценка:
Здравствуйте, Andrew S, Вы писали:

CS>>>>Успехов

А>>>Я всем подряд его шлю(WM_PRINT), но пока никто не откликунулся( Это нормально или я что-то не так делаю?

Т>>Вообще-то WM-PRINT — это не панацея.

Т>>здесь
Автор: Тигра
Дата: 21.04.03


AS>Вообще то — панацея. Идея и *относительно* кривая реализация — у Фень Юаня, остальное — дело времени и терпения.


Уважаемый, так может подумаем над *относительно* НЕ кривой реализацией. Или может есть места где уже подумали над этим вопросом. В противном случае этот вопрос так и будет всплывать на форуме.
Re[6]: Снимок неактивного окна?
От: Andrew S Россия http://alchemy-lab.com
Дата: 25.10.04 16:02
Оценка:
CS>>>>>Успехов
А>>>>Я всем подряд его шлю(WM_PRINT), но пока никто не откликунулся( Это нормально или я что-то не так делаю?

Т>>>Вообще-то WM-PRINT — это не панацея.

Т>>>здесь
Автор: Тигра
Дата: 21.04.03


AS>>Вообще то — панацея. Идея и *относительно* кривая реализация — у Фень Юаня, остальное — дело времени и терпения.


А>Уважаемый, так может подумаем над *относительно* НЕ кривой реализацией. Или может есть места где уже подумали над этим вопросом. В противном случае этот вопрос так и будет всплывать на форуме.


Пример Фень Юаня у меня вполне работает. Есть какие-то вопросы по конкретным местам кода — спрашивайте.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[7]: Снимок неактивного окна?
От: Andrew S Россия http://alchemy-lab.com
Дата: 25.10.04 16:06
Оценка:
А>Ну собственно код я взял из примера Фунь Хуаня(кажется так):
Да уж, с точностью до байта :
http://www.fengyuan.com/article/wmprint.html
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[7]: Снимок неактивного окна?
От: Аноним  
Дата: 25.10.04 16:35
Оценка:
Здравствуйте, Andrew S, Вы писали:

CS>>>>>>Успехов

А>>>>>Я всем подряд его шлю(WM_PRINT), но пока никто не откликунулся( Это нормально или я что-то не так делаю?

Т>>>>Вообще-то WM-PRINT — это не панацея.

Т>>>>здесь
Автор: Тигра
Дата: 21.04.03


AS>>>Вообще то — панацея. Идея и *относительно* кривая реализация — у Фень Юаня, остальное — дело времени и терпения.


А>>Уважаемый, так может подумаем над *относительно* НЕ кривой реализацией. Или может есть места где уже подумали над этим вопросом. В противном случае этот вопрос так и будет всплывать на форуме.


AS>Пример Фень Юаня у меня вполне работает. Есть какие-то вопросы по конкретным местам кода — спрашивайте.


На счет точности до байта я с этого примера его и скопировал Ибо свой,блин,удалил. Вопросы конечно есть. Например почему окно надо закрывать после снимка. Можно ли сделать так, чтобы оно дальше жило?. Мда, и как насчет 9х будет ли там работатью, он ведь вроде обещает, что нет. Еще вопрос функция PrintWindow в Windows XP как грабит сообщения посылает или из памяти берет. Может посмотреть ее исходники(дизасемблер) и сделать так же?
Re[8]: Снимок неактивного окна?
От: Аноним  
Дата: 25.10.04 16:42
Оценка:
Здравствуйте, Аноним, Вы писали:

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


CS>>>>>>>Успехов

А>>>>>>Я всем подряд его шлю(WM_PRINT), но пока никто не откликунулся( Это нормально или я что-то не так делаю?

Т>>>>>Вообще-то WM-PRINT — это не панацея.

Т>>>>>здесь
Автор: Тигра
Дата: 21.04.03


AS>>>>Вообще то — панацея. Идея и *относительно* кривая реализация — у Фень Юаня, остальное — дело времени и терпения.


А>>>Уважаемый, так может подумаем над *относительно* НЕ кривой реализацией. Или может есть места где уже подумали над этим вопросом. В противном случае этот вопрос так и будет всплывать на форуме.


AS>>Пример Фень Юаня у меня вполне работает. Есть какие-то вопросы по конкретным местам кода — спрашивайте.


На счет точности до байта я с этого примера его и скопировал Ибо свой,блин,удалил. Вопросы конечно есть. Например почему окно надо закрывать после снимка. Можно ли сделать так, чтобы оно дальше жило?. Мда, и как насчет 9х будет ли там работатью, он ведь вроде обещает, что нет. Еще вопрос функция PrintWindow в Windows XP как грабит сообщения посылает или из памяти берет. Может посмотреть ее исходники(дизасемблер) и сделать так же?

Самое важное забыл. Получается, что есть 2 варианта работы Windows:
1. Если окно перекрыто другими окнами, то оно впринципе не прорисовано. И его сграбить вообще не возможно. Можно только как Фень Хуань попросить его: "Не могли бы вы нарисоваться в этот контекст устройства таким каким бы вы были, если вдруг стали активным." Т.е. послать ему сообщение.
2. Окно всетаки прорисовано. (Вероятно в 9х, если мы сворачиваем окно , то оно просто напросто перемещается на координаты х=3000, у=3000). Тогда можно сграбить его, вопрос в том как.
Какой из этих вариантов — реальный не знаю. А кто знает?
Re[9]: Снимок неактивного окна?
От: Andrew S Россия http://alchemy-lab.com
Дата: 25.10.04 17:37
Оценка:
А>На счет точности до байта я с этого примера его и скопировал Ибо свой,блин,удалил. Вопросы конечно есть. Например почему окно надо закрывать после снимка. Можно ли сделать так, чтобы оно дальше жило?. Мда, и как насчет 9х будет ли там работатью, он ведь вроде обещает, что нет.

Если бы вы внимательно прочитали предложенную ссылку, то эти вопросы у вас бы не возникли. Прочитайте.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[10]: Снимок неактивного окна?
От: Аноним  
Дата: 25.10.04 20:18
Оценка:
Здравствуйте, Andrew S, Вы писали:

А>>На счет точности до байта я с этого примера его и скопировал Ибо свой,блин,удалил. Вопросы конечно есть. Например почему окно надо закрывать после снимка. Можно ли сделать так, чтобы оно дальше жило?. Мда, и как насчет 9х будет ли там работатью, он ведь вроде обещает, что нет.


AS>Если бы вы внимательно прочитали предложенную ссылку, то эти вопросы у вас бы не возникли. Прочитайте.

Я это читал много раз и даже жо того как задал вопрос. И все же как работает PrintWindow, как Юань прописал?
Re[10]: Вопрос закрыт!
От: Аноним  
Дата: 25.10.04 20:38
Оценка: -3
Здравствуйте, Andrew S, — Вы плохой тестер. Вот и доверяй вам потом. В той ссылке что вы дали переписал пару строк из одного примера и все работает наура и лучше, чем у хуаня(у него консоли не показываются):



void CTestWindowViewingView::OnPaint()
{
CPaintDC dc(this); // device context for painting

HWND hWnd = GetForegroundWindow()->m_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);
::OpenClipboard(hWnd);
EmptyClipboard();
SetClipboardData(CF_BITMAP,hBitmap);
CloseClipboard();
DeleteDC(hMemDC);
DeleteObject(hBitmap);
}
Re[11]: Вопрос закрыт!
От: Andrew S Россия http://alchemy-lab.com
Дата: 25.10.04 21:34
Оценка:
А>Здравствуйте, Andrew S, — Вы плохой тестер. Вот и доверяй вам потом. В той ссылке что вы дали переписал пару строк из одного примера и все работает наура и лучше, чем у хуаня(у него консоли не показываются):

Где вы нашли эти строки в той ссылке, что я вам дал? Потрудитесь хотя бы посмотреть — там WM_PAINT таким образом не используется. Если вы имеете в виду ссылку, что дал вам Тигра — то это уже фатально, мне добавить просто нечего . К тому же то, что поправили вы, никакого отношения к обсуждаемой там проблеме не имеет. Учитесь слушать то, что вам говорят.
А вообще — общаться в таком тоне мне не интересно. Если есть конкретные вопросы — задавайте, нет — значит нет. Аминь.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[12]: Вопрос закрыт!
От: Аноним  
Дата: 25.10.04 22:22
Оценка:
Здравствуйте, Andrew S, Вы писали:

А>>Здравствуйте, Andrew S, — Вы плохой тестер. Вот и доверяй вам потом. В той ссылке что вы дали переписал пару строк из одного примера и все работает наура и лучше, чем у хуаня(у него консоли не показываются):


AS>Где вы нашли эти строки в той ссылке, что я вам дал? Потрудитесь хотя бы посмотреть — там WM_PAINT таким образом не используется. Если вы имеете в виду ссылку, что дал вам Тигра — то это уже фатально, мне добавить просто нечего . К тому же то, что поправили вы, никакого отношения к обсуждаемой там проблеме не имеет. Учитесь слушать то, что вам говорят.

AS>А вообще — общаться в таком тоне мне не интересно. Если есть конкретные вопросы — задавайте, нет — значит нет. Аминь.

Короче, подитожу. Кроме способа с WM_PAINT других нормально работающих — нет. PrintWindow и та использует тот же метод. Другие методы, связанные с реализацией отдельных десктопов — слишоком ресурсоемкие. Хуань и все тут.
Re[12]: Вопрос закрыт!
От: Аноним  
Дата: 25.10.04 22:27
Оценка: -1
Здравствуйте, Andrew S, Вы писали:

А>>Здравствуйте, Andrew S, — Вы плохой тестер. Вот и доверяй вам потом. В той ссылке что вы дали переписал пару строк из одного примера и все работает наура и лучше, чем у хуаня(у него консоли не показываются):


AS>Где вы нашли эти строки в той ссылке, что я вам дал? Потрудитесь хотя бы посмотреть — там WM_PAINT таким образом не используется. Если вы имеете в виду ссылку, что дал вам Тигра — то это уже фатально, мне добавить просто нечего . К тому же то, что поправили вы, никакого отношения к обсуждаемой там проблеме не имеет. Учитесь слушать то, что вам говорят.

AS>А вообще — общаться в таком тоне мне не интересно. Если есть конкретные вопросы — задавайте, нет — значит нет. Аминь.

А мне не интересно, чего вам там не интересно. не хочешь общаться-молчи! Это форум про API а увас в ответах пока не одной дельной мысли нет.
Re[13]: Вопрос закрыт!
От: AndrewJD США  
Дата: 26.10.04 08:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А мне не интересно, чего вам там не интересно. не хочешь общаться-молчи! Это форум про API а увас в ответах пока не одной дельной мысли нет.


Похоже Вы их просто не можете увидеть . Andrew S дал хорошую ссылку на идею того, как можно это сделать (реально работающая идея )
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re: Снимок неактивного окна?
От: Tan4ik Россия  
Дата: 26.10.04 10:06
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здрасти. Как вы думаете можно ли сделать snapshot для любого окна под WindowsXP? И если можно, то как?


Кстати... Были предложения (в предыдущих ветках) засунуть окно на другой десктоп, там щелкнуть и вернуть назад. Кто-нибудь такое пробовал реализовывать? И вообще это реально?
---
С уважением,
Лазарев Андрей
Re[14]: Вопрос закрыт!
От: Аноним  
Дата: 26.10.04 14:05
Оценка:
Здравствуйте, AndrewJD, Вы писали:

AJD>Здравствуйте, Аноним, Вы писали:


А>>А мне не интересно, чего вам там не интересно. не хочешь общаться-молчи! Это форум про API а увас в ответах пока не одной дельной мысли нет.


AJD>Похоже Вы их просто не можете увидеть . Andrew S дал хорошую ссылку на идею того, как можно это сделать (реально работающая идея )


Ну и как же эта ваша хорошая идея работает с консольными приложениями? Приложение не обязано обрабатывать сообщение WM_PRINT. Эта, так называемая, хорошая идея работает на половину. А надо полностью.
Про десктопы- сколько же это ресурсов будет жрать даже представить себе трудно. Лучше даже и не пробовать.
Re[15]: Вопрос закрыт!
От: AlienB5 Россия  
Дата: 18.01.05 10:42
Оценка:
Здравствуйте, Аноним, Вы писали:

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


AJD>>Здравствуйте, Аноним, Вы писали:


А>>>А мне не интересно, чего вам там не интересно. не хочешь общаться-молчи! Это форум про API а увас в ответах пока не одной дельной мысли нет.


AJD>>Похоже Вы их просто не можете увидеть . Andrew S дал хорошую ссылку на идею того, как можно это сделать (реально работающая идея )


А>Ну и как же эта ваша хорошая идея работает с консольными приложениями? Приложение не обязано обрабатывать сообщение WM_PRINT. Эта, так называемая, хорошая идея работает на половину. А надо полностью.

А>Про десктопы- сколько же это ресурсов будет жрать даже представить себе трудно. Лучше даже и не пробовать.

Пробовал рисовать скрытое окно HDC, а именно через событие WM_PRINT, также затестил пример Фень Юаня на своем окошке (ActiveX контрол для IE) — в результате получил что ни в одном, ни в другом случае не прорисовываются контролы (ScrollBar'ы и др.), может есть у кого дельные мысли?

вот мой код (копирует содержимое одного окна в другое)

void CopyWindow(HWND hWndSrc,HWND hWndDst)
{
HDC hDstDC = ::GetWindowDC(hWndDst);
SendMessage(hWndSrc,WM_PRINT,(WPARAM)hDstDC,PRF_CHILDREN|PRF_CLIENT|PRF_ERASEBKGND|PRF_NONCLIENT|PRF_OWNED);
::ReleaseDC(hWndDst,hDstDC);
}
Re[8]: Снимок неактивного окна?
От: AlienB5 Россия  
Дата: 18.01.05 10:47
Оценка:
Здравствуйте, Andrew S, Вы писали:

А>>Ну собственно код я взял из примера Фунь Хуаня(кажется так):

AS>Да уж, с точностью до байта :
AS>http://www.fengyuan.com/article/wmprint.html

Пробовал рисовать скрытое окно, а именно через событие WM_PRINT, также затестил пример Фень Юаня на своем окошке (ActiveX контрол для IE) — в результате получил что ни в одном, ни в другом случае не прорисовываются контролы (ScrollBar'ы и др.), может есть у кого дельные мысли?

вот мой код (копирует содержимое одного окна в другое)

void CopyWindow(HWND hWndSrc,HWND hWndDst)
{
HDC hDstDC = ::GetWindowDC(hWndDst);
SendMessage(hWndSrc,WM_PRINT,(WPARAM)hDstDC,PRF_CHILDREN|PRF_CLIENT|PRF_ERASEBKGND|PRF_NONCLIENT|PRF_OWNED);
::ReleaseDC(hWndDst,hDstDC);
}
Re[9]: Снимок неактивного окна?
От: AlienB5 Россия  
Дата: 18.01.05 11:38
Оценка:
Здравствуйте, AlienB5, Вы писали:

AB>Здравствуйте, Andrew S, Вы писали:


А>>>Ну собственно код я взял из примера Фунь Хуаня(кажется так):

AS>>Да уж, с точностью до байта :
AS>>http://www.fengyuan.com/article/wmprint.html

AB>Пробовал рисовать скрытое окно, а именно через событие WM_PRINT, также затестил пример Фень Юаня на своем окошке (ActiveX контрол для IE) — в результате получил что ни в одном, ни в другом случае не прорисовываются контролы (ScrollBar'ы и др.), может есть у кого дельные мысли?


AB>вот мой код (копирует содержимое одного окна в другое)


AB>void CopyWindow(HWND hWndSrc,HWND hWndDst)

AB>{
AB>HDC hDstDC = ::GetWindowDC(hWndDst);
AB>SendMessage(hWndSrc,WM_PRINT,(WPARAM)hDstDC,PRF_CHILDREN|PRF_CLIENT|PRF_ERASEBKGND|PRF_NONCLIENT|PRF_OWNED);
AB>::ReleaseDC(hWndDst,hDstDC);
AB>}

Все ответ нашел, просто было следующее: ActiveX для IE был создан на другом окне, причем это окно для него родителем не являлось... событие WM_PRINT, посылалось окну, на котором расположен ActiveX, и т.к. эти окна не являются родственными то событие WM_PRINT обрабатывалось корректно только для главного окна (окна с ActiveX)... собственно если послать сообщение WM_PRINT окну с ActiveX, то скроллбары и др. контролы (на ActiveX контроле) отрисуются...
Re: Снимок неактивного окна?
От: King of a Stellar War Украина  
Дата: 27.02.05 20:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здрасти. Как вы думаете можно ли сделать snapshot для любого окна под WindowsXP? И если можно, то как?


Мы тоже решаем такую задачу и для нас это критично. На данный момент могу ответить на некоторые вопросы:

1. Самый лучший способ под XP — это PrintWindow. Но если вы перенесёте окно на другой desktop, то данная функция отрисует только само окно без дочерних(иногда рисует некоторые дочерние). Но эта функция не работает еслы вы захотите получить битмапу например кнопки или комбобокса. Тут бы я хотел узнать, может кто-то знает почему?
2. В примере феньюаня можно сделать легко чтобы окно не умирало: после принтинга просто отключаете хук BeginPaint и EndPaint.
3. Пример феньюаня не очень хороший в плане надёжности: если нужно постоянно следить за содержимым окна, а оно отсабкласится , то это окно уже не будет рисоваться в ваш DC. По этой причине я так понимаю очень плохо этим способом скриншотились приложения написаные на Delphi.
4. Пример c отсылкой WM_ERASEBKGND и WM_PAINT со своим HDC работает только с неперекрытым окном, тобишь не работает

еще есть пара идей, проверю — пришлю
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[3]: Снимок неактивного окна?
От: Pavel Dvorkin Россия  
Дата: 28.02.05 08:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Нашел функцию PrintWindow, но работает только на новых ОС. А может есть способ для всех ОС? Кто знает?


А до конца можно было хелп по PrintWindow дочитать ?
Remarks
This function is similar to WM_PRINT.

Вот WM_PRINT ему и пошли.
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.