![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получить фото окна зная его 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