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...
Пока на собственное сообщение не было ответов, его можно удалить.