Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получить фото окна зная его HWND [D7, WinXP]


JanMihail ©   (2007-07-05 16:46:00) 

Как получить фото окна зная его Handle (HWND)
Желательно в TBitmap
Пробую так, не получается :((

h  : HWND;//Хэндл окнаcan: TCanvas;
...
can := TCanvas.Create;
can.Handle := GetDC(h);

BitBlt(Image1.Canvas.Handle, 0, 0, 700, 600, can.Handle, 0, 0, SRCCOPY);

<HR>
Подскажите пожалуйста как реализовать?


JanMihail   (2007-07-06 11:41:00) [1]


> {RASkov} ©   (05.07.07 21:55) [7]

Спасибо!!! То что нужно!!!


{RASkov}   (2007-07-05 21:55:00) [2]

Вот так попробуй:

function PrintWindow(hwnd: HWND; hdcBlt: HDC; nFlags: UINT): BOOL; stdcall;

implementation
{$R *.dfm}
function PrintWindow; external user32 name 'PrintWindow';
............
PrintWindow(FindWindow(nil, 'Калькулятор'), Canvas.Handle, 0);


Только:
 Windows NT/2000/XP/Vista: Included in Windows XP and Windows Server 2003.
 Windows 95/98/Me: Unsupported.
 value="   Header: Declared in Winuser.h; include Windows.h.
 Library: Use User32.lib.

И если рисуемое окно свернуто, то рисуется его свернутое изо.


{RASkov}   (2007-07-05 21:16:00) [3]

> [5] JanMihail ©   (05.07.07 20:25)

Посмотри вот здесь
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1169652134&n=5&p=1


JanMihail   (2007-07-05 20:25:00) [4]


> {RASkov} ©   (05.07.07 19:42) [4]


Я же говорю. Калькулятор может быть за другим окном. Или часть калькулятора будет за другим окном и уже не будет клиентская область. Будет кусок того окна.


{RASkov}   (2007-07-05 19:42:00) [5]

> [0] JanMihail ©   (05.07.07 16:46)

Ну вообще-то получается... только без рамки (клиентская часть), и если сам калькулятор виден на экране:
var DC: HDC; H: THandle;
begin
 H:=FindWindow(nil, 'Калькулятор');
 DC:=GetDC(H);
 BitBlt(Canvas.Handle, 0, 0, Width, Height, DC, 0, 0, SRCCOPY);
 ReleaseDC(H, DC);
end;

правда помимо калькулятора, рисуется еще и область правее и ниже его (если форма больше калькулятора:)) Но это отдельная тема...


JanMihail   (2007-07-05 18:38:00) [6]


> Cj ©   (05.07.07 18:15) [1]


CopyRect не подходит. Т.к. поверх нужного окна может быть другое окно и CopyRect захватывает часть покрытого окна.


> Игорь Шевченко ©   (05.07.07 18:25) [2]


 Попробовал. Не выходит. Возвращает пустой белый Image


Игорь Шевченко   (2007-07-05 18:25:00) [7]

SendMessage (h, WM_PRINT, Image1.Canvas.Handle, PRF_CLIENT or PRF_NONCLIENT) ?


Cj   (2007-07-05 18:15:00) [8]

создай Bitmap и делай в него CopyRect


Наверх

Титульная страница Поиск, карта сайта Написать письмо