Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.16;
Скачать: CL | DM;

Вниз

Получить фото окна зная его HWND   Найти похожие ветки 

 
JanMihail ©   (2007-07-05 16:46) [0]

Как получить фото окна зная его 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>
Подскажите пожалуйста как реализовать?


 
Cj ©   (2007-07-05 18:15) [1]

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


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

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


 
JanMihail ©   (2007-07-05 18:38) [3]


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


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


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


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


 
{RASkov} ©   (2007-07-05 19:42) [4]

> [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 20:25) [5]


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


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


 
{RASkov} ©   (2007-07-05 21:16) [6]

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

Посмотри вот здесь
http://delphimaster.net/view/4-1169652134/


 
{RASkov} ©   (2007-07-05 21:55) [7]

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

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.

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


 
JanMihail ©   (2007-07-06 11:41) [8]


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

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



Страницы: 1 вся ветка

Текущий архив: 2007.09.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
15-1187178159
AlexanderMS
2007-08-15 15:42
2007.09.16
Как отключить autorun и как удалить вирус?


8-1165527388
AndreyRu
2006-12-08 00:36
2007.09.16
Antialiasing Глифов!


2-1187607571
Arks
2007-08-20 14:59
2007.09.16
Как клонировать vcl-объект?


2-1187587032
Александр_К
2007-08-20 09:17
2007.09.16
Сокеты


15-1185519092
БарЛог
2007-07-27 10:51
2007.09.16
Командная строка Windows